amiga-news DEUTSCHE VERSION
.
Links| Forums| Comments| Report news
.
Chat| Polls| Newsticker| Archive
.

amiga-news.de Forum > Programmierung > Eigene IP ermitteln? [ - Search - New posts - Register - Login - ]

1 -2- 3 4 5 6 7   Thread is closed  

2008-03-04, 18:11 h

MaikG
Posts: 5172
User
>Sag mal, bist Du eigentlich so blöd, oder tust Du nur so?

bsdsocked kommt mit einer fehlermeldung zurück wenn ich localhost
angebe. Wozu soll ich drüber nachdenken? bsd arbeitet nicht
mit dieser IP, warum soll ich mich fragen, was passieren würde
wenn bsd nicht mit einem Fehler zurück kähme???




>Und dann gib auf deine "einfache" Frage die Antwort ...

Der mit dem aktiven DNS Gateway?
Aber ich komme wohl auch an keine andere IP, ganz egal welche Netzwerkkarte/Interface.
Von daher stellt sich die frage nicht.


>Wenn ich das tue, komme ich auf folgende Lösung:
>> wget irgendein.webservi.ce/meine_ip.html
>> Datei einlesen und parsen, Fensterrahmen drum, fertig.

Ich zu der alten antwort:


>MaikG
>Posts: 4364

>Ja, gut da hat man aber wieder das Problem von einer
>Internetseite abhängig zu sein...

[ Dieser Beitrag wurde von MaikG am 04.03.2008 um 18:13 Uhr geändert. ]

[ - Direct link - ]

2008-03-04, 21:36 h

DNA
Posts: 176
User
Zitat:
Original von Holger:
Wenn es darum geht, einen Server zu betreiben, muss sowieso dort, wo NAT konfiguriert wurde, auch ein entsprechendes Port-Forwarding konfiguriert werden, das man kaum automatisieren kann. Da nützt das Herausfinden der eigenen, externen IP-Adresse sowieso nix.


Also in meinem Fall habe ich exakt sowas gebraucht, weil ich in einem Netzwerkspielserver anzeigen wollte, wie dessen externe IP lautet, damit dieser diese IP an die Teilnehmer durchsagen konnte. Also sowas ist gar nicht abwegig. (Bei "echten" Serverdiensten sollte man natürlich zusehen, dass man dynamische DNS-Einträger verwendet. Dann hat man den Stress nicht)



--
C64-II, DTV-Mod, A1200/030(50), A3000T/060, CD32+SX1, CD32+SX32, Pegasos 1, Pegasos 2, Acorn RPC-SA, HP712/100, SGI Indigo, Powermac 9600/300, ...
Home: http://www.2ndmoon.de ICQ:14803035

[ - Direct link - ]

2008-03-04, 21:36 h

DNA
Posts: 176
User
Aber im allgemeinen finde ich die abdriftende Tonlage in diesem Thread sehr erstaunlich, nur weil MaikG's Anforderung nicht in das kleinformatige Weltbild mancher Forumsteilnehmer passt. Haltet lieber die Klappe, anstatt dem Threaderöffner eine unpassende Lösung aufdrücken zu wollen.
--
C64-II, DTV-Mod, A1200/030(50), A3000T/060, CD32+SX1, CD32+SX32, Pegasos 1, Pegasos 2, Acorn RPC-SA, HP712/100, SGI Indigo, Powermac 9600/300, ...
Home: http://www.2ndmoon.de ICQ:14803035

[ - Direct link - ]

2008-03-05, 09:35 h

Solar
Posts: 3680
User
Zitat:
Original von DNA:
Aber im allgemeinen finde ich die abdriftende Tonlage in diesem Thread sehr erstaunlich, nur weil MaikG's Anforderung nicht in das kleinformatige Weltbild mancher Forumsteilnehmer passt.


Es geht mir nicht um MaikG's Anforderung, sondern um seinen Umgang mit Vorschlägen und Rückfragen. Er ist der Held, er kann / weiß alles, wenn etwas nicht funktioniert ist das immer Schuld irgendwelcher Software, und auf Rückfragen antwortet er grundsätzlich nicht auf kooperative Weise.

Zitat:
Haltet lieber die Klappe, anstatt dem Threaderöffner eine unpassende Lösung aufdrücken zu wollen.

Was zum Teufel heißt "unpassend"?

MaikG ist nicht bereit, zu sagen, wofür er seine IP eigentlich braucht. Womit keiner wissen kann, was "unpassend" ist und was nicht.

MaikG ist nicht in der Lage, auf eine direkte Frage ("was spricht denn gethostname()?") zu antworten.

MaikG hat dermaßen wenig Ahnung von dem, was er tut, daß er gethostbyname() auf 127.0.0.1 ausführt.

MaikG, auf den Denkfehler hingewiesen, hat nicht mal genug Selbstzweifel, mal nachzulesen oder nachzudenken, sondern stellt sich hin und sagt "Funktioniert doch gar nicht, warum soll ich weiter drüber nachdenken?".

Das ist nicht das erste, zweite, oder dritte Mal, das MaikG genau diesem Schema folgt. Er stellt eine Frage, und danach muß man ihm die Hilfe aufdrängen, und jegliches Problem liegt selbstverständlich an der Software oder der Hardware, jedoch nie an eigener Unkenntnis, gemachten Fehlern, oder falschen Design-Entscheidungen.

Er hätte es gerne vorgekaut, genau so wie er sich das vorstellt, und bitte ohne selbst auch nur eine Seite Dokumentation lesen zu müssen.

Höchstwahrscheinlich ist alles, was er tun muß, ein Aufruf von gethostname() gefolgt von gethostbyname() und parsen des Rückgabestrukts. Welche Probleme er da haben mag, entzieht sich meiner Kenntnis, weil er selbst einfache Fragen nicht vernünftig beantworten kann.

[ - Direct link - ]

2008-03-05, 10:10 h

MaikG
Posts: 5172
User
>Es geht mir nicht um MaikG's Anforderung, sondern um seinen Umgang
>mit Vorschlägen und Rückfragen. Er ist der Held, er kann / weiß
>alles, wenn etwas nicht funktioniert ist das immer Schuld
>irgendwelcher Software, und auf Rückfragen antwortet er
>grundsätzlich nicht auf kooperative Weise.


Ach, solar, das ist doch alles gülle was du schreibst.
Warum schreibst du eigentlich überhaupt in Programmierung?
Du hast zwar mal behauptet das du es kannst, an einen Source
von dir kann ich mich jedoch nicht erinnern...
Woran ich mich aber erinnern kann, ist das du ständig leuten
vor den Kopf stösst, streit anfängst oder offtopic scheibst.
Sorry musste mal gesagt werden.


>MaikG ist nicht bereit, zu sagen, wofür er seine IP eigentlich
>braucht. Womit keiner wissen kann, was "unpassend" ist und was nicht.

Wurde beantwortet.


>MaikG hat dermaßen wenig Ahnung von dem, was er tut, daß er
>gethostbyname() auf 127.0.0.1 ausführt.

Tja, wenn ich ahnung hätte würde ich nicht fragen.
Wenn ich mich hier verirrt habe in den "Hier sind alle Profis, niemals
fragen stellen" abteil dann tuts mir leid.




>Er hätte es gerne vorgekaut, genau so wie er sich das vorstellt,
>und bitte ohne selbst auch nur eine Seite Dokumentation lesen zu
>müssen.

bsd guide hab ich gelesen.



>Höchstwahrscheinlich ist alles, was er tun muß, ein Aufruf von
>gethostname() gefolgt von gethostbyname() und parsen des
>Rückgabestrukts.

Ich werde das nochmal, ganz extra ausprobieren. Für gethostname habe
aber kein Basic beispiel. Hoffe mal die rückgabe ist die selbe...


[ - Direct link - ]

2008-03-05, 10:18 h

DNA
Posts: 176
User
@Solar:

> Es geht mir nicht um MaikG's Anforderung, ...

Es geht Dir also nicht um seine Anforderung. Das ist spannend. Es ist ein Programmierforum mit einer konkreten Frage die Du nicht (mehr) beantworten willst. Hey, peinlich. Es kann ja sein dass MaikG es öfters nicht so macht wie Du das willst. Er findet ja auch meine Lösungsformulierung (Webservice, HTML-Parsen eines MyIP-Dienstes) scheinbar zu umständlich, wobei es die einzige Chance sein sollte. Mag sein.

Aber ansonsten hast Du zwar sehr viel geschrieben, alles auf Probleme bezogen, welche ER nicht in die Welt geworfen hat. Denn probier doch bitte mal folgendes:

Geh jetzt mal von der Ursprungsfrage aus, dass er die öffentliche IP braucht. Und? Antwort?

gethostbyname liefert keine allgemeingültige Lösung und auch die loopback-IP nützt ihm in dem Falle reichlich wenig. Einen sinnvollen Verwendungszweck für eine öffentliche IP habe ich auch schon in einem meiner letzten Beiträge erwähnt. Die Frage ist also durchaus berechtigt. (auch wenn Du sowas nicht brauchst, nicht brauchen willst, oder weltbildbedingt nicht wahr haben willst das man sowas brauchen kann)
Du hast ihn lediglich mit Themaverfehlungen zugetextet. Er hat sie nicht beantwortet. So what?
--
C64-II, DTV-Mod, A1200/030(50), A3000T/060, CD32+SX1, CD32+SX32, Pegasos 1, Pegasos 2, Acorn RPC-SA, HP712/100, SGI Indigo, Powermac 9600/300, ...
Home: http://www.2ndmoon.de ICQ:14803035

[ - Direct link - ]

2008-03-05, 10:29 h

akl
Posts: 265
User
@MaikG:

Falls das keine universelle Lösung sein soll, sondern nur für Dich persönlich, bietet sich folgendes an (Alternativen):

1. Auswertung von http://checkip.dyndns.org/ (siehe DNA)

2. Du kaufst Dir einen DSL-Router mit integriertem DynDNS-Client und richtest Dir einen DynDNS-Hostname ein, dessen IP Du sehr leicht ständig in Erfahrung bringen kannst (siehe Solar).

3. Wie 1. jedoch Auswertung der lokalen Status-Seite Deines DSL-Routers.


[ - Direct link - ]

2008-03-05, 11:17 h

Solar
Posts: 3680
User
@ DNA:

Ich weiß zwar ehrlich nicht, wieso Du hier den MaikG-Anwalt gibst, aber schau' Dir unseren Spezi doch an:

Zitat:
Original von MaikG:

Du hast zwar mal behauptet das du es kannst, an einen Source
von dir kann ich mich jedoch nicht erinnern...


Seiner ist länger als meiner, weil ich ihm kein fertig vorgekautes Programm samt grafischer Oberfläche vorgezeigt habe, oder ist er der Brunzer weil er für AmigaOS programmiert und ich nicht?

Sind wir hier im Sandkasten?

Zitat:
Original von MaikG:

bsd guide hab ich gelesen.
[...]
Für gethostname habe aber kein Basic beispiel. Hoffe mal die rückgabe ist die selbe...


Sprich, er behauptet, "bsd guide" (was auch immer er darunter versteht) gelesen zu haben. Was weiß ich, vielleicht steht da über gethostname() auch nichts drin (was mich aber wundern würde). Aber wieso ist Meister Programmierer noch nicht einmal darauf gekommen, "gethostname" in Google einzugeben? Nein, er ermittelt den Rückgabewert lieber über "Prinzip Hoffnung".

Das ist peinlich. Mehr als das, es ist unwürdig für jemanden, der ein paar Absätze weiter oben mit seiner Programmierer-Potenz geprahlt hat.

Zitat:
Original von DNA:

Es ist ein Programmierforum mit einer konkreten Frage die Du nicht (mehr) beantworten willst.


Meine Antwort war, probiere gethostname() / gethostbyname(). Bislang war die einzige Begründung seitens MaikG's, warum das nicht funktionieren sollte, seine eigene Unfähigkeit diese Funktionen auch nur nachzulesen, geschweige denn zu benutzen. Was soll ich da noch sagen?

Dein Vorschlag war auch kein vollständiges Listing im von MaikG bevorzugten Basic-Dialekt, also keine "fertige" Lösung für ihn. Mein Beispielcode wäre in C, würde ihm also auch nicht passen.

Zitat:
Geh jetzt mal von der Ursprungsfrage aus, dass er die öffentliche IP braucht. Und? Antwort?
C code:
#include <unistd.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>

int main()
{
    struct hostent * host;
    char hostname[200];
    if ( gethostname( hostname, 200 ) == 0 )
    {
        int i;
        host = gethostbyname( hostname );
        printf( "Hostname: %sn", host->h_name );
        for ( i = 0; host->h_aliases[i] != 0; ++i )
        {
            printf( "Alias #%d: %sn", i, host->h_aliases[i] );
        }
        for ( i = 0; host->h_addr_list[i] != 0; ++i )
        {
            struct in_addr in;
            memcpy( &in.s_addr, host->h_addr_list[i], sizeof( in.s_addr ) );
            printf( "%sn", inet_ntoa(in) );
        }
    }
    return 0;
}


So. Bin ich jetzt ein besserer Mensch in Deinen Augen? Mag sein, daß es nicht das liefert, was er will / braucht, aber darüber kann man erst reden, wenn er es hat.

Weiß ich ob MaikG's Rechner Host- und Domainname korrekt vom Router übernimmt? Weiß ich ob die Funktionen in der Amiga-bsdsocket in denselben Headern stehen oder dasselbe Verhalten zeigen wie die Solaris-Funktionen, mit denen ich das (in Ermangelung eines Amigas) ausprobiert habe? Weiß ich, wie man in MaikG's bevorzugtem Basic-Dialekt eine C-Funktion aufruft?

Zitat:
Du hast ihn lediglich mit Themaverfehlungen zugetextet. Er hat sie nicht beantwortet. So what?

"Warum willst Du die IP wissen, mit der Du surfst?"
"Was spricht denn gethostname()?"
"Bist Du denn nun weiter gekommen, nach der Erkenntnis das gethostbyname() auf 127.0.0.1 wenig sinnvoll ist?"

Keine davon würde ich als Themaverfehlung bezeichnen. Keine davon hat er bislang sinnvoll beantwortet. Zumindest bei den letzten beiden hätte er nach dem "wie" fragen können, statt Statements abzugeben wie "funktioniert ja eh nicht".


[ Dieser Beitrag wurde von Solar am 05.03.2008 um 11:18 Uhr geändert. ]

[ - Direct link - ]

2008-03-05, 11:18 h

MaikG
Posts: 5172
User
Also ich gethostname liefert nur den namen des Computers.
Speise ich den in gethostbyname bekomme ich nur die Netzwerkkarten IP
meines Computers(192.168.0.1).
Weitere experimente kann ich nicht machen, ich habe nur die
bmap für bsd. Die .bc(enthält die offsets) habe ich nicht.
Die entprechenden asm dateien finde ich nicht.

[ - Direct link - ]

2008-03-05, 11:36 h

whose
Posts: 2156
User
Edit: Hat sich dann doch von selbst erledigt :)

Bin mal gespannt, was dabei als Ergebnis herauskommt, gemacht habe ich das auch noch nie.

[ Dieser Beitrag wurde von whose am 05.03.2008 um 11:53 Uhr geändert. ]

[ - Direct link - ]

2008-03-05, 11:45 h

DNA
Posts: 176
User
Zitat:
Original von Solar:
@ DNA:

Ich weiß zwar ehrlich nicht, wieso Du hier den MaikG-Anwalt gibst ...


Ich würde auch für Dich einspringen, wenn ich fände daß Du grad veralbert werden sollst. :)

MaikG scheint Dir ja schon länger auf den Keks zu gehen, aber das hat nix mit dem aktuellen Thema zu tun. Auch wenn Du nun sogar die Quellen gepostet hast. Solchen Code soll MaikG mal schön selbst aushecken. Du hättest den gar nich posten brauchen. Daher habe ich auch zu meinen Quellen keinen PseudoCode gepostet.

Zitat:
Original von Solar:
C code:
#include <unistd.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>

int main()
{
    struct hostent * host;
    char hostname[200];
    if ( gethostname( hostname, 200 ) == 0 )
    {
        int i;
        host = gethostbyname( hostname );
        printf( "Hostname: %sn", host->h_name );
        for ( i = 0; host->h_aliases[i] != 0; ++i )
        {
            printf( "Alias #%d: %sn", i, host->h_aliases[i] );
        }
        for ( i = 0; host->h_addr_list[i] != 0; ++i )
        {
            struct in_addr in;
            memcpy( &in.s_addr, host->h_addr_list[i], sizeof( in.s_addr ) );
            printf( "%sn", inet_ntoa(in) );
        }
    }
    return 0;
}



Schön. Ermittelt den Hostnamen und alle internen IPs. Nützt nix.

Zitat:
Original von Solar:
So. Bin ich jetzt ein besserer Mensch in Deinen Augen?

Deswegen nicht, nein. Der Code war unnötig weil:
- er sowas selbst können sollte
- weil der Code das Problem nicht löst.
Aber dennoch finde ich gut, dass wir uns wieder zu einer vernünften Ausdrucksweise einigen konnten. :)

Zitat:
Original von Solar:
Weiß ich ob MaikG's Rechner Host- und Domainname korrekt vom Router übernimmt? Weiß ich ob die Funktionen in der Amiga-bsdsocket in denselben Headern stehen oder dasselbe Verhalten zeigen wie die Solaris-Funktionen, mit denen ich das (in Ermangelung eines Amigas) ausprobiert habe? Weiß ich, wie man in MaikG's bevorzugtem Basic-Dialekt eine C-Funktion aufruft?

Nein, wissen wir nicht. Aber darum ging es auch nicht. Es ging um die öffentliche IP. Und die rein lokal zu ermitteln ist bei der Vielfalt von lokalen Umgebungen imho unmöglich.

Zitat:
Du hast ihn lediglich mit Themaverfehlungen zugetextet. Er hat sie nicht beantwortet. So what?

Zitat:
Original von Solar:
"Warum willst Du die IP wissen, mit der Du surfst?"
"Was spricht denn gethostname()?"
"Bist Du denn nun weiter gekommen, nach der Erkenntnis das gethostbyname() auf 127.0.0.1 wenig sinnvoll ist?"

Keine davon würde ich als Themaverfehlung bezeichnen. Keine davon hat er bislang sinnvoll beantwortet. Zumindest bei den letzten beiden hätte er nach dem "wie" fragen können, statt Statements abzugeben wie "funktioniert ja eh nicht".


1. das war doch geheim. :)
2. weil der lokale Hostname für die Frage nicht interessant ist.
3. auch lokal. Daher nicht besonders wichtig.

Daher hat er eine beantwortet und ab dann kam nix mehr was ihm wirklich helfen würde, wie ich oben bereits geschrieben habe.

Also ich würde einfach nochmal alle technisch wirklich machbaren Möglichkeiten aufzeigen (hat akl ja schon gemacht) und programmieren muß er es dann selber. Aber bisher (und deswegen halte ich halt auf MaikG) basierten alle Anfeindungen (wenn auch evtl. historisch nachvollziehbar) auf Lösungen die keine waren, um ihm eine gewisse Ignoranz vorzuwerfen.

Grüße,
DNA
:dance1:
--
C64-II, DTV-Mod, A1200/030(50), A3000T/060, CD32+SX1, CD32+SX32, Pegasos 1, Pegasos 2, Acorn RPC-SA, HP712/100, SGI Indigo, Powermac 9600/300, ...
Home: http://www.2ndmoon.de ICQ:14803035

[ - Direct link - ]

2008-03-05, 11:45 h

Solar
Posts: 3680
User
Zitat:
Original von MaikG:
Also ich gethostname liefert nur den namen des Computers.
Speise ich den in gethostbyname bekomme ich nur die Netzwerkkarten IP
meines Computers(192.168.0.1).
Weitere experimente kann ich nicht machen, ich habe nur die
bmap für bsd. Die .bc(enthält die offsets) habe ich nicht.
Die entprechenden asm dateien finde ich nicht.


Gut, so kann man arbeiten!

Was genau liefert gethostname? Tatsächlich den Computernamen (baldur, frodo, myamiga, was auch immer), oder tatsächlich den externen Namen vom Provider (12.34.56.78.adsl.snet.net oder ähnlich kryptischer Kram)? Im letzteren Fall würde ich nämlich mit dem Finger auf den Router zeigen, weil dessen Lookup bei gethostbyname() eine nicht korrekte Abkürzung nimmt.

Bist Du 100% sicher, daß 192.168.0.1 nicht etwa die Adresse Deines Routers im lokalen Netz ist? Bei vielen Routern wäre 192.168.0.1 nämlich die Voreinstellung. Auch dann wäre das DNS-Handling des Routers nicht ganz sauber. Aber in dem Fall könnte man versuchen, ob mit gethostbyaddr() eine der Alias-Addressen des Routers evtl. den gewünschten Erfolg (sprich, den externen DNS-Namen) ergibt.

[ - Direct link - ]

2008-03-05, 11:59 h

Solar
Posts: 3680
User
Gut, alle Gemüter wieder bei Raumtemperatur angekommen. Ich gebe zu, manchmal an die Decke zu gehen, wenn ich das Gefühl habe, mein Gegenüber nagelt sich die Bretter selbst vor den Kopf. (Gegen schon immer vorhandene Bretter kann man nix. ;-) )

Zitat:
Original von DNA:

Schön. Ermittelt den Hostnamen und alle internen IPs. Nützt nix.


Bei mir daheim funktioniert's, gestern abend ausprobiert. Ist eine Frage, wie Router und lokaler Rechner aufeinander eingestellt sind.

Wenn der Router die externe IP nicht an den Rechner weiterreicht, bringt einem eben diese IP auf dem Rechner herzlich wenig, weil eben nicht der Rechner, sondern nur der Router unter dieser Adresse erreichbar ist. Dann führt um das Bemühen "externer" Dienste wie z.B. DynDNS nichts herum.

Ein weiterer möglicher Hack wäre, die HTML-Statusseite des Routers abzurufen und zu parsen - aber das wäre natürlich auf den konkreten Router zugeschnitten, keine generische Lösung.

Womit wir wieder bei der Frage sind, was hat er eigentlich vor. ;-)


[ - Direct link - ]

2008-03-05, 13:04 h

Reth
Posts: 1858
User
Zitat:
Original von Solar:
Womit wir wieder bei der Frage sind, was hat er eigentlich vor. ;-)


OT: Das muss er ja nicht beantworten!

Gibt es denn keinen Webservice, den man da ansprechen kann?

[ - Direct link - ]

2008-03-05, 13:18 h

Solar
Posts: 3680
User
Zitat:
Original von Reth:
Zitat:
Original von Solar:
Womit wir wieder bei der Frage sind, was hat er eigentlich vor. ;-)


OT: Das muss er ja nicht beantworten!


Er muß ja nicht sagen, was er für eine Anwendung programmieren will. Aber er wird wohl kaum die IP tatsächlich nur in einem Fenster auf der Workbench anzeigen wollen. Also was er mit der IP vorhat kann er schon verraten. (Clients anbieten, damit sie connecten können?)

Zitat:
Gibt es denn keinen Webservice, den man da ansprechen kann?

Ist ihm ja zu kompliziert / nicht ausfallsicher genug.

[ Dieser Beitrag wurde von Solar am 05.03.2008 um 13:19 Uhr geändert. ]

[ - Direct link - ]

2008-03-05, 17:52 h

MaikG
Posts: 5172
User
>Gut, so kann man arbeiten!

>Was genau liefert gethostname? Tatsächlich den Computernamen (baldur,
>frodo, myamiga, was auch immer), oder tatsächlich den externen Namen
>vom Provider (12.34.56.78.adsl.snet.net oder ähnlich kryptischer
>Kram)? Im letzteren Fall würde ich nämlich mit dem Finger auf den
>Router zeigen, weil dessen Lookup bei gethostbyname() eine nicht
>korrekte Abkürzung nimmt.

Den namen den ich für diesen Computer gewählt habe.


>Bist Du 100% sicher, daß 192.168.0.1 nicht etwa die Adresse Deines
>Routers im lokalen Netz ist?

Ja, ich kenne meine IP's und Namen von sämtlichen Rechnern.


>Ein weiterer möglicher Hack wäre, die HTML-Statusseite des Routers
>abzurufen und zu parsen - aber das wäre natürlich auf den konkreten
>Router zugeschnitten, keine generische Lösung.

Ich hab doch gar keinen Router.


>Er muß ja nicht sagen, was er für eine Anwendung programmieren will.
>Aber er wird wohl kaum die IP tatsächlich nur in einem Fenster auf
>der Workbench anzeigen wollen. Also was er mit der IP vorhat kann
>er schon verraten. (Clients anbieten, damit sie connecten können?)

Das mit dem Fenster auf der Workbench ist doch gut.
Die IP soll exakt die sein, welche ich auch von dem Webservice
erhalten würde.

Source probiere ich mal, später.

[ - Direct link - ]

2008-03-05, 18:33 h

Holger
Posts: 8116
User
Zitat:
Original von DNA:
Also in meinem Fall habe ich exakt sowas gebraucht, weil ich in einem Netzwerkspielserver anzeigen wollte, wie dessen externe IP lautet, damit dieser diese IP an die Teilnehmer durchsagen konnte. Also sowas ist gar nicht abwegig.

Entweder hast Du jetzt unterschlagen, dass es in Deinem Fall nicht um NAT ging oder dass es dennoch erforderte, dass der Server-Betreiber seinen Router so konfiguriert, dass Port geforwarded werden. (Wobei er im letzteren Fall seine IP normalerweise in den Konfigurations-UI, egal welcher Art, ganz nebenbei mitnimmt...)

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Direct link - ]

2008-03-05, 18:36 h

Holger
Posts: 8116
User
Zitat:
Original von MaikG:
Das mit dem Fenster auf der Workbench ist doch gut.
Die IP soll exakt die sein, welche ich auch von dem Webservice
erhalten würde.

Ich hoffe, Du kippst jetzt nicht aus den Latschen, wenn Du erfährst, dass die auch vom Standort und der Netzwerkkonfiguration abhängen kann.

Wenn es lediglich um eine dumme Statusanzeige auf der Workbench geht, würde ich mal die Dokumentation des TCP/IP-Stacks angucken. Mit ziemlicher Sicherheit bekommt man alle Infos via ARexx-Port in für Basic leicht zu verarbeitenden Strings...

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Direct link - ]

2008-03-05, 18:56 h

MaikG
Posts: 5172
User
durch gcc gehts der code nicht:

In file included from eigeneip.c:6:
/gg/include/arpa/inet.h:47: warning: 'struct in_addr' declared inside parameter list
/gg/include/arpa/inet.h:47: warning: its scope is only this definition or declaration, which is probably not what you want.
/gg/include/arpa/inet.h:48: warning: 'struct in_addr' declared inside parameter list
/gg/include/arpa/inet.h:48: warning: parameter has incomplete type
/gg/include/arpa/inet.h:50: warning: parameter has incomplete type
/gg/include/arpa/inet.h:52: warning: parameter has incomplete type
eigeneip.c: In function 'main':
eigeneip.c:22: storage size of 'in' isn't known
eigeneip.c:24: type of formal parameter 1 is incomplete



>Ich hoffe, Du kippst jetzt nicht aus den Latschen, wenn Du erfährst,
>dass die auch vom Standort und der Netzwerkkonfiguration abhängen
>kann.

Ich weiss das die IP individuell ist. Ich z.B. habe immerzu eine
neue wenn ich aus dem Internet und wieder rein gehe.


>Wenn es lediglich um eine dumme Statusanzeige auf der Workbench
>geht, würde ich mal die Dokumentation des TCP/IP-Stacks angucken.
>Mit ziemlicher Sicherheit bekommt man alle Infos via ARexx-Port
>in für Basic leicht zu verarbeitenden Strings...

Genesis? Miami? Roadshow?

Das einzige was die doch gemein haben ist die bsdsocked library?
Und in der Doku habe ich sowas nicht gefunden.

[ Dieser Beitrag wurde von MaikG am 05.03.2008 um 19:00 Uhr geändert. ]

[ - Direct link - ]

2008-03-05, 19:26 h

DNA
Posts: 176
User
Zitat:
Original von Holger:
Zitat:
Original von DNA:
Also in meinem Fall habe ich exakt sowas gebraucht, weil ich in einem Netzwerkspielserver anzeigen wollte, wie dessen externe IP lautet, damit dieser diese IP an die Teilnehmer durchsagen konnte. Also sowas ist gar nicht abwegig.

Entweder hast Du jetzt unterschlagen, dass es in Deinem Fall nicht um NAT ging oder dass es dennoch erforderte, dass der Server-Betreiber seinen Router so konfiguriert, dass Port geforwarded werden. (Wobei er im letzteren Fall seine IP normalerweise in den Konfigurations-UI, egal welcher Art, ganz nebenbei mitnimmt...)

Es geht um jede lokale Umgebung. Ein Portforwarding ist auch nötig, aber ich bin in der Lage dem Nutzer seine öffentliche IP zu zeigen, ohne das dieser seinen Router, oder eine weiterre Website nach seiner IP befragen muß. Ich kann sie direkt im Spiel anzeigen, woraufhin er diese seinen Mitspielern ansagen kann. Die Einrichtung des Forwarding ist ja eine einmalige Angelegenheit.


--
C64-II, DTV-Mod, A1200/030(50), A3000T/060, CD32+SX1, CD32+SX32, Pegasos 1, Pegasos 2, Acorn RPC-SA, HP712/100, SGI Indigo, Powermac 9600/300, ...
Home: http://www.2ndmoon.de ICQ:14803035

[ - Direct link - ]

2008-03-05, 19:28 h

DrNOP
Posts: 4118
User
Zitat:
Original von MaikG:
Ach, solar, das ist doch alles gülle was du schreibst.
Warum schreibst du eigentlich überhaupt in Programmierung?
Du hast zwar mal behauptet das du es kannst, an einen Source
von dir kann ich mich jedoch nicht erinnern...


Hmtja, an einen Source von mir kannst du dich sicher auch nicht erinnern - aber ich sage dir trotzdem, daß du vielleicht inzwischen gemerkt hättest daß die library bsdsocket heißt, wenn du dich ausführlich mit ihrer Doku befaßt hättest...
--
Signaturen mit mehr als zwei Zeilen gehen mir auf den Wecker

[ - Direct link - ]

2008-03-05, 22:12 h

MaikG
Posts: 5172
User
>Hmtja, an einen Source von mir kannst du dich sicher auch nicht
>erinnern -

Welchen? Die Suchen funktion vom Forum ist nicht die beste...



>aber ich sage dir trotzdem, daß du vielleicht inzwischen gemerkt
>hättest daß die library bsdsocket heißt,
>wenn du dich ausführlich mit ihrer Doku befaßt hättest...


Weil ich etwas lese muss ich es noch nicht schreiben können.
In Deutsch hatte ich eine 4 oder 5. In Englisch war ich zwar
besser, deshalb muss die schreibweise trotzdem nicht richig
sein.
Vielleicht hab ich ja so eine rechtschreibschwäche...

[ - Direct link - ]

2008-03-06, 07:56 h

Solar
Posts: 3680
User
@ MaikG:

Du hast ein lokales Netzwerk (192.168.x.y) mit Zugang zum Internet, aber keinen Router?

Welcher Teil Deines Netzwerks hat die Internetverbindung?


Zitat:
Original von MaikG:
durch gcc gehts der code nicht:

In file included from eigeneip.c:6:
/gg/include/arpa/inet.h:47: warning: 'struct in_addr' declared inside parameter list
/gg/include/arpa/inet.h:47: warning: its scope is only this definition or declaration, which is probably not what you want.
/gg/include/arpa/inet.h:48: warning: 'struct in_addr' declared inside parameter list
/gg/include/arpa/inet.h:48: warning: parameter has incomplete type
/gg/include/arpa/inet.h:50: warning: parameter has incomplete type
/gg/include/arpa/inet.h:52: warning: parameter has incomplete type
eigeneip.c: In function 'main':
eigeneip.c:22: storage size of 'in' isn't known
eigeneip.c:24: type of formal parameter 1 is incomplete


Tjo... Problem Deiner Entwicklungsumgebung, würde ich sagen: GCC hat kein Problem mit meinem Code (der bei mir mit "gcc -lnsl test.c" auch ganz problemlos läuft), sondern mit Deiner Version von arpa/inet.h... da kann ich Dir leider nun gar nicht helfen. Eventuell weiß einer mit mehr Amiga-Erfahrung hier Rat?

Zitat:
>Wenn es lediglich um eine dumme Statusanzeige auf der Workbench
>geht, würde ich mal die Dokumentation des TCP/IP-Stacks angucken.
>Mit ziemlicher Sicherheit bekommt man alle Infos via ARexx-Port
>in für Basic leicht zu verarbeitenden Strings...

Genesis? Miami? Roadshow?

Das einzige was die doch gemein haben ist die bsdsocked library?
Und in der Doku habe ich sowas nicht gefunden.


Und genau das meine ich mit "was hast Du eigentlich vor". Soll das eine universelle Lösung werden, die auf jedem Amiga unabhänging von Netzwerkkonfiguration und verwendetem Stack funktionieren soll, oder willst Du auf Deinem Rechner die IP ermitteln?

[ Dieser Beitrag wurde von Solar am 06.03.2008 um 07:56 Uhr geändert. ]

[ - Direct link - ]

2008-03-06, 09:26 h

MaikG
Posts: 5172
User
>Du hast ein lokales Netzwerk (192.168.x.y) mit Zugang zum Internet,
>aber keinen Router?

Nein, da ist kein Internet. Das Netzwerkkarteninterface war auch
gar nicht aktiv.


>Welcher Teil Deines Netzwerks hat die Internetverbindung?

Die Serielle Schnittstelle.


>Tjo... Problem Deiner Entwicklungsumgebung, würde ich sagen: GCC hat
>kein Problem mit meinem Code (der bei mir mit "gcc -lnsl test.c"
>auch ganz problemlos läuft), sondern mit Deiner Version von
>arpa/inet.h... da kann ich Dir leider nun gar nicht helfen.
>Eventuell weiß einer mit mehr Amiga-Erfahrung hier Rat?


was bedeutet -lnsl ?
Ich guck mal ob ich andere Includes finde.



>Und genau das meine ich mit "was hast Du eigentlich vor". Soll das
>eine universelle Lösung werden, die auf jedem Amiga unabhänging
>von Netzwerkkonfiguration und verwendetem Stack funktionieren soll,
>oder willst Du auf Deinem Rechner die IP ermitteln?

Unabhängig.
Wenns abhängig werden sollte, hätte ich einfach die Datei
genommen, in der immer die aktuelle IP steht.

[ - Direct link - ]

2008-03-06, 10:08 h

Solar
Posts: 3680
User
Zitat:
Original von MaikG:

was bedeutet -lnsl ?


"Linke mit nsl-Bibliothek". NSL -> Network Services Library. Ohne die findet bei mir der Linker gethostbyname() und inet_ntoa() nicht - bei Dir mag das anders sein.

Zitat:
>Welcher Teil Deines Netzwerks hat die Internetverbindung?

Die Serielle Schnittstelle.


Na gut. Wie wir sehen, ist es selbst bei direkter Internetverbindung nicht wirklich zuverlässig gegeben, daß man seinen "externen" Namen erfährt.

Da Du sagst, Du willst eine universelle Lösung, führt m.E. kein Weg an einem "externen" Dienst a la Webservice vorbei.

Darum schließe ich mit einer wiederholten Warnung: Je nachdem, was Du vorhast, mag die so ermittelte IP trotz allem wertlos sein - zum Beispiel kann jemand anders mit dieser IP noch lange keine Verbindung zu einem Serverprozeß auf Deiner Maschine aufbauen, wenn diese hinter einem Router oder einer Firewall steckt.

[ - Direct link - ]

2008-03-06, 14:49 h

DrNOP
Posts: 4118
User
Zitat:
Original von Solar:
Zitat:
>Welcher Teil Deines Netzwerks hat die Internetverbindung?

Die Serielle Schnittstelle.


Na gut. Wie wir sehen, ist es selbst bei direkter Internetverbindung nicht wirklich zuverlässig gegeben, daß man seinen "externen" Namen erfährt.

Was mich etwas wundert ist, daß sich niemand hier Gedanken um den Kontext macht, in dem gethostname etc. funktionieren.

Ich habe mich nun tatsächlich nicht mit der BSD-Doku beschäftigt, sondern hier nur eine VxWorks-Variante. Die mag also etwas weniger umfangreich sein.

Jedenfalls hat Robin schon erwähnt, daß eine Maschine durchaus mehrere IP-Adressen haben kann; Holger hat es präzisiert, weil für mehrere IP-Adressen noch nicht mal mehrere physikalische Adapter notwendig sind.

Die Frage, die ich mir also stelle ist:
Kann man die Suche nach der Adresse nicht vielleicht auf eine Schnittstelle (ob physikalisch oder logisch) eingrenzen?

Wenn ich mir die aktivierten Interfaces meiner Maschine hier anschaue finde ich drei Stück:

lo0
cs0
sl1

Dabei enthält nur der Eintrag cs0 eine Ethernet (MAC-)Adresse, weil das mein ftp- und telnet-Zugang ist.
Der lo0 ist der loopback für den localhost, und über das sl1 gehen maschineninterne SLIP-Verbindungen.

Meine Routingtabelle wiederum sagt mir, welche Adresse über welches Interface geführt wird. Wenn also mein ftp-Zugang nicht mehr tut, könnte ich auch schauen, welche Adresse für das Interface cs0 eingetragen ist.


Ansonsten: Die Funktionen die hier schon erwähnt wurden würden mir für Maiks Problem wahrscheinlich nichts nützen, weil ich entweder die IP-Adresse kennen muß um den Namen zu erfahren oder umgekehrt.

Will ich blind etwas neues erfahren, müßte ich mit JEDER MÖGLICHEN IP-Adresse auf die Host-Tabelle losgehen und solange probieren, bis kein Fehler zurückkommt.
--
Signaturen mit mehr als zwei Zeilen gehen mir auf den Wecker

[ - Direct link - ]

2008-03-06, 16:35 h

Robin
Posts: 1056
User
@DrNOP:

Ganz so blind musst du nicht vorgehen. Und dein Router muss auch nicht
unbedingt in deiner Hosttabelle zu finden sein.
Sprich du wuerdest den "Schuldigen" nicht mal unbedingt finden.

Die einzige Stelle, die weiss wie die öffentliche IP ist bleibt nunmal
der Router. Und da sind dann halt andere Protokolle gefragt.

Hier muesste man jetzt NAT (Network Address Translation) betreiben ... und da kenn ich keinen einfachen Weg ;) bzw da hab ich null Ahnung von ...

Edit:

Schritt 1: Ip rausfinden
Schritt 2: Zugehöriges Gateway rausfinden
Schritt 3: Routingtabelle des Gateways rausfinden
Schritt 4: Plausibelste IP aus der Routingtabelle als öffentliche IP annehmen oder ;)

PS: Da es sich um einen seriellen Zugang handelt und kein Router
mitspielt sollte sich alles auf dem TCP/IP-Stack beschränken ...
Schau mal was netstat -r zu sagen hat ;)
--
(Bild) http://my.morphosi.net/
morphos

[ Dieser Beitrag wurde von Robin am 06.03.2008 um 16:42 Uhr geändert. ]

[ - Direct link - ]

2008-03-06, 23:14 h

Reth
Posts: 1858
User
Also ich seh das Ganze immer noch so (hoffe es richtig verstanden zu haben):

Es soll die IP ermittelt werden, mit der man gerade im Internet unterwegs ist, dieses macht ja nur Sinn bzw. ist nur möglich, wenn eine Online-Verbindung besteht!

Dann spricht m.M. nach auch im Sinne der Ausfallsicherheit nichts dagegen, einen oder mehrere Webservices, die so einen Dienst bieten anzuzapfen!

Das geht mit allen TCP/IP-Stacks und ist daher universell einsetzbar!

Ciao

[ - Direct link - ]

2008-03-07, 10:37 h

MaikG
Posts: 5172
User
Also durch gcc geht der Code nicht, habs nochmal mit dem
4.3er SDK Includes probiert.


>Dann spricht m.M. nach auch im Sinne der Ausfallsicherheit nichts
>dagegen, einen oder mehrere Webservices, die so einen Dienst bieten
>anzuzapfen!

Ist nicht die eleganteste Lösung. Gut man könnte das jetzt
frei konfigurierbar machen. Den Inhalt muss man trotzdem parsen...

[ - Direct link - ]

2008-03-07, 10:51 h

DNA
Posts: 176
User
Zitat:
Original von MaikG:
Ist nicht die eleganteste Lösung. Gut man könnte das jetzt
frei konfigurierbar machen. Den Inhalt muss man trotzdem parsen...

Also Eleganz ist hier völlig egal, weil auschliesslich die Befragung eines Servers im Internet eine verlässliche Information liefert. Selbst wenn Dein aktueller Code auf Deinem System laufen sollte, wirst Du beim nächsten Rechner Probleme haben (Router, etc.).

Das Parsen ist nur bei HTML notwendig (wobei es trivial ist). Beim Webservice bekommst Du einen String. Sauberer geht's nicht.

Durch Abfragen mehrerer Quellen machst Du Deine Anwendung zukunftssicherer. Auf Dauer nicht zu 100%, klar, es sei denn Du bietest den Dienst auf einer eigenen Domain an. Aber immerhin ist es die richtige IP, und keine zufällig ermittelte lokale IP vom zufällig richtigen Adapter auf einer sich ständig reduzierenden Anzahl direkt eingewählter Rechner.
Kurzum: Ohne angeschlossene USB-Glaskugel wird es auf anderen System sehr schwer werden die öffentliche IP zu ermitteln.

Aber das sagen wir ja bereits seit dem fünften bis zehnten Posting.

Grüße,
DNA
:dance1:
--
C64-II, DTV-Mod, A1200/030(50), A3000T/060, CD32+SX1, CD32+SX32, Pegasos 1, Pegasos 2, Acorn RPC-SA, HP712/100, SGI Indigo, Powermac 9600/300, ...
Home: http://www.2ndmoon.de ICQ:14803035

[ Dieser Beitrag wurde von DNA am 07.03.2008 um 10:54 Uhr geändert. ]

[ - Direct link - ]


1 -2- 3 4 5 6 7   Thread is closed  


amiga-news.de Forum > Programmierung > Eigene IP ermitteln? [ - Search - New posts - Register - Login - ]


.
Masthead | Privacy policy | Netiquette | Advertising | Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved.
.