İp öğrenme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
MercilessTurk
Üye
Mesajlar: 94
Kayıt: 28 Eki 2005 10:14

Mesaj gönderen MercilessTurk »

Bunu delphi 7 de olan IdIPWatch bileşini ile yapabiliyoruz sanırım isterseniz bir deneyin(ben direkt ağ üzerinden nete static ip ile bağlandığımdan adsl de işe yarayıp yaramayacağını bilmiyorum)

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
if IdIPWatch1.IsOnline then
showmessage('ip: '+IdIPWatch1.CurrentIP);
end;
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

@MercilessTurk;

Evet, bu bileşen adsl ya da router ortamında işe yaramıyor, zaten kodları da local ip'yi verecek şekilde yazılmış..

Bunun için Delphi'de bildiğim kadarıyla bileşen ya da yöntem yok.Ve emin olmamakla birlikte bunun için yazılmış bir api de yok diye biliyorum."whatismyip" sitesinin yarın kapanmayacağının garanti edilmemesi hasebiyle geliştirdiğin proje bunu sürekli kullanacak ve önemli bir işleve sahipse, bunun için bir php scripti kullanarak get etmek (tabi return edilen değeri parse etmen de gerekecek..) gibi bir çözüm önerilebilir.

Kolay gele..
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

http://mkysoft.com/ip.php
Benim web adresimi kullanabilirsin. Kapansa bile fazla uzun sürmez tekrar online olur. Server Amerikada'dır bu nedenle fiber optik koparsa sorumluluk kabul etmem :)
işini garantiye almak için yedekli çalışabilirsin.yani bildiğin adresleri denesin eğer ulaşamazsa.
kolay gelsin.
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Mesaj gönderen hdayi »

Bir başka yok da tracert kullanmak olabilir.
C:\WINDOWS>tracert http://www.delphiturkiye.com

Tracing route to delphiturkiye.com [70.103.189.68]
over a maximum of 30 hops:

1 1 ms 1 ms 1 ms 192.168.0.1(DEfault Gateway)
2 16 ms 1 ms 1 ms 192.168.1.1(DEfault Gatewayin öbür ucu)
3 37 ms 29 ms 9 ms dsl.dynamicxxxxxxxx.ttnet.net.tr [xx.xxx.xx.xxxx](Ip adresiniz)
4 74 ms 43 ms 26 ms 10.20.14.154
5 30 ms 28 ms 13 ms ankM160-kysM20.ttnet.net.tr [195.175.10.9]
6 20 ms 21 ms 28 ms getepeM160-ankM160.ttnet.net.tr [195.175.7.2]
7 105 ms 92 ms 95 ms so-6-0-0.ar3.LON3.gblx.net [208.48.239.5]
8 229 ms 203 ms 205 ms so2-1-0-2488M.ar1.DCA3.gblx.net [67.17.67.57]
9 228 ms 205 ms 203 ms fe-1-2-0--0.er01.asbn.eli.net [207.173.144.25]
10 221 ms 203 ms 205 ms so-2-0-0--0.cr01.mcln.eli.net [207.173.114.129]

11 227 ms 204 ms 203 ms so-0-0-0--0.cr02.chcg.eli.net [207.173.114.250]

12 321 ms 381 ms 333 ms so-1-0-0--0.cr01.slkc.eli.net [207.173.115.237]

13 259 ms 306 ms 307 ms ge-0-0-0--0.gw02.slkc.eli.net [207.173.115.246]

14 258 ms 239 ms 233 ms gw0-cust-BLUEHOST-COM.slkc.eli.net [70.97.59.22]

15 241 ms 225 ms 225 ms box68.bluehost.com [70.103.189.68]

Trace complete.
Bu sonuç bi dosyayaya atılıp oradan parse edilebilir.
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
poshet303
Üye
Mesajlar: 235
Kayıt: 26 Eki 2005 01:15

Mesaj gönderen poshet303 »

IP adresi (ve daha pek çok ek bilgi) veren siteler var.

http://www.whatismyip.com/
http://www.showmyip.com/

Bu sitelerden birini kullanarak IP adresi alınabilir. Site sayfasını alır parse eder IP adresini öğrenirsiniz.
Ben bir örnek function yazdım. Kodu buraya yapıştıracam yeterince fikir verir sanırım.

Kod: Tümünü seç


function TForm1.GetMyIPAdress(Site:string='http://www.showmyip.com/'):string;
Var
 MyUrlFile:TDownloadURL;
 MyIPInfFile:TextFile;
 myLine:String;
 index:integer;
begin
 result:='';
 MyUrlFile:=TDownloadURL.Create(Self);
 MyUrlFile.Filename:=ExtractFilePath(Application.Exename)+'MyIpFile.htm';
 MyUrlFile.URL:=Site;
 MyUrlFile.Execute;
 MyUrlFile.Free;

 AssignFile(MyIPInfFile,ExtractFilePath(Application.Exename)+'MyIpFile.htm');
 Reset(MyIPInfFile);
 While not EOF(MyIPInfFile) do
 begin
  ReadLn(MyIPInfFile,myLine);
  index:=Pos('85.',myLine);
  if index>0 then begin
   While (index<=Length(myLine)) AND (myLine[index]<>' ') do
   begin
    result:=Result+myLine[index];
    inc(index);
   end;
   break;
  end;
 end;
  CloseFile(MyIPInfFile);
  DeleteFile(ExtractFilePath(Application.Exename)+'MyIpFile.htm')
// http://www.whatismyip.com/ : displaycopy('85.105.89.11')
// http://www.showmyip.com/   : displaycopy('85.105.89.11')
// Üstteki iki sitede displaycopy('85.105.89.11') ifadesi var IP alınırken bu yapıdan da alınabilir.
// Ben bunu tercih etmedim Site değişiklik yaparsa çalışmaz. Ayrıca iki sitede <TITLE> içinde IP adresini gösteriyor
// <TITLE> Bu dosyada üstte yer aldığından arama daha hızlı Ayrıca değişme olasılığı daha az.
// Program bireaz yavaş çalışıyor sebebi dosyayı indirmeyle alakalı hattınız ne kadar hızlıysa o kadar hızlı çalışır
end;

Ayrıca;
http://www.showmyip.com
Sitesinin WSDL desteği var. IP yada HOST belirterek ilgili IP yada HOST hakkında detaylı bilgi alınabiliyor (İlke, ISP vb.)


Kolay gelsin
cozturk
Üye
Mesajlar: 484
Kayıt: 15 Haz 2005 05:22

Mesaj gönderen cozturk »

uses ExtActns
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
cozturk yazdı:uses ExtActns
yani :?:
ne demek istedin?
sanırım @sherlockholmes e cevap olarak yazdın. ama bunu belirtseydin daha iyi olurdu.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
cozturk
Üye
Mesajlar: 484
Kayıt: 15 Haz 2005 05:22

Mesaj gönderen cozturk »

bir önceki poshet303 arkadaşa cevap olarak yazdım. bukodu çalıştırmak için eklemek gerekiyordu.
Kullanıcı avatarı
muratcelik64
Üye
Mesajlar: 17
Kayıt: 16 Tem 2014 05:07

Re: İp öğrenme

Mesaj gönderen muratcelik64 »

http://en.softmaker.kz/articles/delphi/ ... tware.html

function GetHTML(const AURL: string): string;
var
sHead,sHost,sPage: string;
x,xCnt,xCntTotal: integer;
sock: TClientSocket;
ws: TWinSocketStream;
ss: TStringStream;
buff: array[0..4095] of char;
const
CrLf = #13#10;
begin
Result := '';

sHost := AURL;
x := Pos('//',sHost) ;
if x > 0 then
System.Delete(sHost,1,x+1) ;
x := Pos('/',sHost) ;
if x > 0 then
begin
sPage := Copy(sHost,x,Length(sHost)) ;
System.Delete(sHost,x,Length(sHost)) ;
end
else
begin
sPage := '/';
end;

sock := TClientSocket.Create(nil) ;
try
try
sock.ClientType := ctBlocking;
sock.Port := 80;
sock.Host := sHost;
sock.Open;

ws := TWinSocketStream.Create(sock.Socket,20000) ;
ss := TStringStream.Create('') ;
try
sHead := 'GET ' + sPage + ' HTTP/1.0 ' + CrLf +
'Host: ' + sHost + CrLf + CrLf;
StrPCopy(buff,sHead) ;

ws.Write(buff,Length(sHead) + 1) ;
ws.Position := 0;

FillChar(buff,SizeOf(buff),0) ;
repeat
xCnt := ws.Read(buff,SizeOf(buff)) ;
xCntTotal := xCntTotal + xCnt;
ss.Write(buff[0],xCnt) ;
until xCnt = 0;

Result := ss.DataString;
finally
ws.Free;
ss.Free;
end;
except
end;
finally
sock.Free;
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
ip: string;
begin
with TStringlist.Create do
try
Text := GetHTML('http://en.softmaker.kz/get_an_external_ip_address.php') ;
if Count > 0 then ip := Strings[Count - 1];
finally
Free;
end;
ShowMessage('Your external ip address: ' + ip);
// Memo1.TEXT:= 'Your external ip address: ' + ip;
end;
Kullanıcı avatarı
mucahityagmur
Üye
Mesajlar: 10
Kayıt: 07 Şub 2015 01:47

Re: İp öğrenme

Mesaj gönderen mucahityagmur »

Indy kullabiliyorsan,
işini kolayca çözebilirsin.
HTTP çağırıp dönen 'STRING' i ayrıştırabilirsin.

Kod: Tümünü seç

Uses ...,
  IdBaseComponent,
  IdComponent, IdTCPConnection, IdTCPClient, IdHTTP;
........
.......
procedure TForm2.BtnGetExternalIPClick(Sender: TObject);
Var StIP : String;
    tmpLines : TStringList;
begin
  stIp := IdHTTP1.Get('http://ipinfo.io/json'); // http den çağırıyoruz.
  // Şöyle bir metin (Text) üretir
  {"ip": "75.9.150.219",
   "hostname": "75.9.150.219.static.ttnet.com.tr",
   "city": "Urfa",
   "region": "Urfa",
   "country": "TR",
   "loc": "30.1917,29.0611",
   "org": "AS9121 Turk Telekomunikasyon Anonim Sirketi" }

         Memo1.Lines.Add('Ip Info : '+stIp);
  tmpLines :=TStringList.Create;
  tmpLines.Delimiter:=',';
  tmpLines.Text:=stIp;
  stIp:=tmpLines[1];  // İlk Satır IP nin yazdığı alan
  tmpLines.Free;
  Delete(stIp,1,Pos(':',stIp)+2);  // "ip": string siliniyor
  Delete(stIp,Length(stIp)-1,255); // " çift tırnak siliniyor
           Memo1.Lines.Add('EXT IP:'+stIP);
end;
Cevapla