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!
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) :sciana:
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