| Autor |
Beitrag |
Crowbar
      
Beiträge: 180
WinXP, SP2
D6 Enterprise
|
Verfasst: Fr 29.08.03 21:04
Hallo,
wie bekomme ich meine eigene Internet-IP-Adresse mit einer Programmroutine heraus?
Ich habe D6 sowie eine Netzwerkkarte.
Im Forum habe ich schon gesucht! Doch die vorgestellten Routinen geben mir nur ständig die lokale IP meiner Netzwerkarte heraus, nicht aber die IP-Adresse, mit der ich derzeitig im Internet verbunden bin.
Auf einen guten Rat, vielleicht mit Code hoffend...
Crowbar
|
|
Brueggendiek
      
Beiträge: 304
Win 98, Win98SE, Win XP Home
D5 Std
|
Verfasst: Fr 29.08.03 21:51
Hallo!
Super-einfach ist: www.whatismyip.com/ runterladen, dann im Ergebnis nach 'Your ip is ' suchen und dahinter steht sie!
Das funktioniert auch in Verbindung mit Routern oder ähnlichen, weil da in der Regel die "üblichen IP-Ausleseprogramme" die IP des Rechners gegenüber dem Route (also die lokale Netzwerk-IP) herausbekommen.
Für den Zugriff empfehle ich die Indy-Komponenten, hier IdHttp.
Gruß
Dietmar Brüggendiek
|
|
oPPi
      
Beiträge: 66
MS Win 7 Pro, WinXP Pro
D3 Pro, TurboDelhi, Kylix 3 Pro
|
Verfasst: Fr 29.08.03 21:52
Du brauchst:
1x NMHTTP ( Fastnet-Komponentenleiste ) //HTTP
1x Button //btn_Search
1x Edit //txt_InternetIP
Und trägst in das OnClick Ereignis des Buttons ein:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| TForm1.btn_SearchClick(Sender: TObject); const sURL = 'http://www.whatismyip.com'; sSearchText = 'your ip is'; var sResult: string; sIP : string; begin try HTTP.Get(sURL); sResult := http.Body; sResult := LowerCase(sResult); sIP := Copy(sResult, pos(sSearchText, sResult) + Length(sSearchText) + 1,pos(' ', Copy(sResult, pos(sSearchText, sResult) + Length(sSearchText) + 1, length(sResult))) -1 ); txt_InternetIP.Text := sIP; except ShowMessage('Sorry, Die Internet IP kann nicht angezeigt werden !!!'); end; end; |
Ich hoffe ich hab dir weiterhelfen können ...
gruß
oPPi
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 31.08.03 06:30
Es geht auch komplett ohne Komponenten:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48:
| uses winsock;
function GetLocalIPs: String; type PPInAddr= ^PInAddr; var wsaData : TWSAData; HostInfo : PHostEnt; HostName : Array[0..255] of Char; Addr : PPInAddr; begin if WSAStartup($0102, wsaData) <> 0 then Exit; try if GetHostName(HostName, SizeOf(HostName)) <> 0 then begin result:=''; Exit; end; HostInfo:= GetHostByName(HostName); if HostInfo=nil then begin result:=''; Exit; end; Addr:=Pointer(HostInfo^.h_addr_list); if (Addr=nil) or (Addr^=nil) then begin result:=''; Exit; end; if not (copy(strpas(inet_ntoa(addr^^)),1,7) = '192.168') then begin result:=StrPas(inet_ntoa(Addr^^)); inc(Addr); end else begin inc(addr); while Addr^ <> nil do begin result:=StrPas(inet_ntoa(Addr^^)); inc(Addr); end; end; finally WSACleanup; end; end; |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| function GetIP: String; var phoste : PHostEnt; Buffer : array[0..100] of Char; WSAData : TWSAData; begin result := ''; if WSAStartup($0101, WSAData)<>0 then exit; GetHostName(Buffer, SizeOf(Buffer)); phoste := GetHostByName(Buffer); if phoste = NIL then result := '0.0.0.0' else result := StrPas(inet_ntoa(PInAddr(phoste^.h_addr_list^)^)); WSACleanup; end; |
Der obere Code sollte auch alle lokalen IPs, also auch die aus dem Lan liefern.
|
|
MrSaint
      
Beiträge: 1033
Erhaltene Danke: 1
WinXP Pro SP2
Delphi 6 Prof.
|
Verfasst: So 31.08.03 13:03
Bei den Versionen von Luckie besteht aber eben das Porblem, wenn man hinter nem Router oder Proxy hängt.... dann bekommt man nix bzw. die falsche IP. Ich würd auch die Sache mit dem whatismyip.com bevorzugen. wenn man selber irgendwo space im netz hat, auf dem PHP läuft, kann man es sich auch einfacher machen und das Script auf den Server packen:
| PHP Script hat folgendes geschrieben: |
<?php
echo $_SERVER["REMOTE_ADDR"];
?>
|
dann bekommt man nur die IP ausgegeben und muss sie sich nich erst noch rausfiltern  das prob is eben, dass whatismyip.com auch mal das "Layout" ändern kann und dann stimmt die Auslese-Routine nich mehr...
MrSaint
_________________ "people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
|
|
Crowbar 
      
Beiträge: 180
WinXP, SP2
D6 Enterprise
|
Verfasst: So 31.08.03 17:22
Hallo,
ich habe "Luckie's" - Routine -> "GetLocalIPs" ausgetestet.
Sie funktioniert einwandfrei und liefert mir "trotz" meiner Netzwerkkarte und einem vorgeschalteten Proxie die richtige Internet-IP-Adresse.
Vielen Dank an Luckie und den anderen  !
Tschüss Crowbar
|
|
oPPi
      
Beiträge: 66
MS Win 7 Pro, WinXP Pro
D3 Pro, TurboDelhi, Kylix 3 Pro
|
Verfasst: Mo 01.09.03 09:51
@MrSaint
dein tipp mit dem php-script is verry good.
hab das jetzt bei mir auf die website gepackt und brauch nicht mehr
über whatismyip.com gehen. hatte da schon öfters das prob das die
nicht erreichbar waren.
Zuletzt bearbeitet von oPPi am Mo 15.09.03 11:35, insgesamt 1-mal bearbeitet
|
|
MrSaint
      
Beiträge: 1033
Erhaltene Danke: 1
WinXP Pro SP2
Delphi 6 Prof.
|
Verfasst: Mo 01.09.03 10:20
@oPPi: freut mich
MrSaint
_________________ "people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
|
|
Experience1986
      
Beiträge: 192
Win XP Pro SP2
Delphi 7
|
Verfasst: Mo 15.09.03 10:36
Hab durch zufall hier mal durchgegugt.
| PHP Script hat folgendes geschrieben: |
<?php
echo $_SERVER["REMOTE_ADDR"];
?>
|
@MrSaint
So bekommt man leider die Server IP, für die IP des Besuchers (was ja durch ein Programm dann passieren würde) brauch man nur:
<?php
echo $REMOTE_ADDR;
?>
|
|
lemming
      
Beiträge: 470
Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
|
Verfasst: Mo 15.09.03 11:21
Ich würde, bei einer Anwendung bei der sowieso das Internet "an" sein muss über die whatismyip.com Lösung gehen, da ich dann die echte IP hätte, wenn zum Beispiel der Rechner hinter einem Gateway sitzt, aber mich das nicht interessiert, sondern nur die IP.
Viele IF THENs ich weiss
|
|
oPPi
      
Beiträge: 66
MS Win 7 Pro, WinXP Pro
D3 Pro, TurboDelhi, Kylix 3 Pro
|
Verfasst: Mo 15.09.03 11:46
Du kannst auch:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.btn_LoadClick(Sender: TObject); var URL : String; begin URL:='http://www.it-leinefelde.de/delphi/myip.php'; NMHTTP1.Get(URL); txt_Internet_IP.Text := NMHTTP1.Body; end; |
verwenden, bei whatismyip.com hab ich das problem schon öfters
gehabt, das die seite nicht erreichbar war. Ich hab DSL und mein
Rechner sitzt auch hinter einem Router und es wird mir über den
Script:
Quelltext 1: 2: 3:
| <?php echo $REMOTE_ADDR; ?> |
auch die genaue Internet-IP angezeigt. Dein Webspace muß natürlich PHP unterstützten.
|
|
mlspider
      
Beiträge: 33
|
Verfasst: Do 23.10.03 22:10
Wie wär's denn hiermit:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44:
| implementation
uses registry;
{$R *.dfm}
var regist : TRegistry;
procedure TForm1.FormCreate(Sender: TObject); begin regist := TRegistry.Create; regist.RootKey := HKEY_LOCAL_MACHINE; end;
function GetIPAddress: string;
var phoste : PHostEnt; Buffer : array [0..100] of char; WSAData : TWSADATA;
begin result := ''; if WSAStartup($0101, WSAData) <> 0 then exit; GetHostName(Buffer, SizeOf(Buffer)); phoste :=GetHostByName(buffer); if phoste = nil then result := '127.0.0.1' else result := StrPas(inet_ntoa(PInADDr(phoste^.h_addr_list^)^)); WSACleanup; end;
procedure TForm1.Button1Click(Sender: TObject); begin close; end;
procedure TForm1.Button3Click(Sender: TObject); begin regist.OpenKey('\SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces\{6313E1DE-FDA3-4C50-859E-07BB4854DDCD}',True); Label4.Caption := regist.ReadString('DhcpIPAddress'); Label6.Caption := GetIPAddress; Label8.Caption := '127.0.0.1'; end; |
|
|
wham1010
      
Beiträge: 17
Win XP Prof.
D6 Pers
|
Verfasst: So 16.11.03 23:36
Titel: noch eine frage dazu!
Hallo!!
wollt das selbe jetzt auch auf die basis mit dem eigenen php-Script realisieren, jedoch mit den indy-Komponenten. leider schein ich mich damit nicht ganz zurechtzufinden (heut erst installiert!)!
kann zwar die URL mit IdHTTP1.Get(URL); aufrufen, jedoch hab ich jetzt keine ahnung, wie ich den IP-String hier auslese (IdHTTP.Body scheints ja nicht zu geben wie bei der Fastnet-komponente)
vielen dank im voraus!
|
|
oPPi
      
Beiträge: 66
MS Win 7 Pro, WinXP Pro
D3 Pro, TurboDelhi, Kylix 3 Pro
|
Verfasst: Mo 17.11.03 00:36
hy das funzt bei mir so:
Delphi-Quelltext 1:
| txt_WebIP.Text:= HTTP1.Get('http://www.meinserver.de/myip.php'); |
in dem Textfeld wird dir dann deine Internet-IP angezeigt.
Gruß
oPPi
|
|