Jak odczytać zewnętrzny adres IP

voyteck

Witam!

W tym artykule dowiemy się, jak pobrać zewnętrzny adres IP komputera, na którym uruchomiono program.
Znalazłem fajną stronę, która nam to ułatwi: http://www.whatismyip.org - nie ma tutaj niepotrzebnego tekstu... Jest tylko IP... i dobrze! Nie trzeba będzie kombinować :P

Weźmy się więc do pracy!

Na formę wrzuć TIdHTTP z zakładki "Indy Clients", TButton, i TEdit.

Kliknij 2x na Button i zrób coś takiego:

procedure TForm1.Button1Click(Sender: TObject); //procedura kliknięcia na Button1
var                      
  HTML : String;  //deklaracja zmiennej
begin
  HTML := HTTP.Get('http://www.whatismyip.org/');  //pobranie HTML ze strony
  edit1.text := HTML;  //wpisanie pobranego HTML do Edit1
end;  //koniec :P 

Skompiluj i sprawdź.

Mam nadzieję, że Ci się udało :P

Pozdrawiam, HEJ!

FAQ

10 komentarzy

program zewnetrzneIP;
{$APPTYPE CONSOLE}
uses
IDhttp;

var
thisismyip,ip :STRING;
l,p1,p2:integer;
idhttp1:tidhttp;
begin
idhttp1:=tidhttp.Create(nil);
idhttp1.HandleRedirects:=true;
thisismyip :=idhttp1.get('http://www.opensc.ws/myip.php');
L := Length('Your ip is: ');
P1 := Pos('Your ip is: ',thisismyip);
P2 := Pos(' or if u',thisismyip);
IP := Copy(thisismyip,P1 + L, P2 - P1 - L);
idhttp1.Free;
writeln(#13#10);
writeln('--------------------------');
writeln('Twoje IP to: '+Ip) ;
writeln('--------------------------');
readln;
end.

A jak ktos usunie strone z której pobierasz IP?
I do cholery nie pisz tych kretyńskich emotikonek języków, buziek, dupek i innych bo to nie blog pryszczatej gimnazjalistki tylko poważny portal o programowaniu. :P :D ;) :)

Wydaje mi się że prościej umieścić na formie komponent NMEcho i label:

Label1.caption:=NMEcho1.LocalIP;

..zapomniałem dopisać ustawienia dla TSimpleTCPClient

Host: www.whatismyip.org
Port: 80

migajek => Sposób sprawdzony

Z TClientSocket jest tak samo, tylko że się eventy komponentu nieco inaczej nazywają....

nie ma to jak wwalić opis z błędem...

SKUTECZNE ROZWIĄZANIE:

1 x TButton
1 x SimpleTCPClient (z UtilMinda) / albo TClientSocket (standardowe w Delphi 4/5/6 - w nowszych dołączane tylko w wersjach komercyjnych - jako pakiet DO SAMODZIELNEJ INSTALACJI !)
1 x TEdit

KOD:

procedure TForm1.Button1Click(Sender: TObject);
begin
TCPClient.Connected:=True;
end;

procedure TForm1.TCPClientConnected(Sender: TObject);
Var S: TStringStream;
begin
S:=TStringStream.Create('');
S.WriteString('GET / HTTP/1.1' +#13#10);
S.WriteString('User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98)' +#13#10);
S.WriteString('Accept: /' +#13#10+#13#10);
TCPClient.SendStream(S);
S.Free;
end;

procedure TForm1.TCPClientRead(Sender: TObject; Stream: TStream);
Var S: TStringStream;
Tmp_Str: String;
begin
Stream.Seek(0,soFromBeginning);
S:=TStringStream.Create('');
S.CopyFrom(Stream,0);
Tmp_Str:=StrPos(PChar(S.DataString),#13#10#13#10);
Edit1.Text:=Copy(Tmp_Str,5,Length(Tmp_Str)-4);
S.Free;
end;

voteck, serio? samo IP ci pokazuje? bo mi pokazuje caly kod html (tak jak zreszta napisales w komentarzu)

nie dziala jak trzeba... w moim przypadku (mamy przekazywanie fowarded-for) pokazuje moje wewnętrzne IP. whatismyip.com pokazuje poprawnie zewnetrzne. Za to ip.prv.pl pokazuje oba adresy (o ile zostana przekazane)

jesli ten z koncowka org by sprawdzal, czy fowardowany ip jest z puli wykorzystywanej w lanach, jesli tak to pokazywalby ten bezposredni - elegancko by to dzialalo...

Po co kombinować? Jest taka stronka, to skorzystajmy z tego. Wszystko jest bezsensowne! Skoro tak, po co jest ta strona?
Ja tego sposobu kiedyś szukałem i pytałem po forach. W odpowiedziach dostawałem tylko kombinacje z wyciąganiem IP, który stoi po tekście: "Your IP is: '...'" Tak to można się bawić. Ale jeśli potrzebujesz tego na prawdę to nie ma większego sensu.

Czemu w Polsce wszyscy tylko sobie do gardła skaczą??

A co miałeś na myśli pisząc: co innego gdyby wyciagalo SAM adres z kodu ?

Przecież to wyciąga SAM ADRES. Pierw skompiluj, a potem oceniaj. Wszedłeś wogóle na tę stronę, którą podałem?

Po co kombinować? Jest taka stronka, to skorzystajmy z tego. Wszystko jest bezsensowne! Skoro tak, po co jest ta strona?
Ja tego sposobu kiedyś szukałem i pytałem po forach. W odpowiedziach dostawałem tylko kombinacje z wyciąganiem IP, który stoi po tekście: "Your IP is: '...'" Tak to można się bawić. Ale jeśli potrzebujesz tego na prawdę to nie ma większego sensu.

Czemu w Polsce wszyscy tylko sobie do gardła skaczą??

to juz predzej do FAQ ... chociaz moim zdaniem jest bezsensowne... co innego gdyby wyciagalo SAM adres z kodu (pos + copy), no to moze do FAQ by sie nadalo