Tüm Platformlar için Hızlı Uygulama Geliştirme --->    Kitabımız...      Delphi

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Bu Portu Kim Kullanıyor ?
#1
Merhabalar,
Windows'un kendi servislerinden bazıları, bilgisayar açıldığında rastgele boş olan bir port seçiyor. Ve eğer bu port sizin uygulamanızda kullandığınız port ise tabi windows amca bu port zaten başka uygulama tarafından kullanımda diyor ama kim kullanıyor söylemiyor.

Aynı şekilde Delphi uygulamanızda da port kullanmak isterseniz bu uyarıyı veriyor.
Mavnjk.png

Bu portu kim kullanıyor Kolayca tespit edebilmek için,
cmd konsolumuza aşağıdaki kodu yazıp çalıştırıyorsunuz ve bize bir işlem id'si veriyor. Bu id ile de görev yöneticisinden görebiliriz.
netstat -npano TCP | find "1229"
WGQMOQ.png

Saygılar.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla
#2
Paylaşım için teşekkürler.

Ben de bunun "Delphice"sini yazayım Smile

Linkleri Görebilmeniz İçin Giriş yap veya Üye Oldaha önce bahsettiğim iphlpapi.dll içindeki Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol APIsi PC'de kullanılan portları tespit etmemizi sağlar. Yine aynı linkte paylaştığım örnek kodlarda çok az değişiklik yapılarak basit bir şekilde hangi portların kullanıldığını ve bu portları kullanan programların isimlerini şöyle tespit edebiliriz:

procedure TForm1.Button1Click(Sender: TObject);
var
 i: integer;
 dllHandle : THandle;
 GetExtendedTcpTable: function(pTcpTable: Pointer; dwSize: PDWORD; bOrder: BOOL; lAf: ULONG; TableClass: TCP_TABLE_CLASS; Reserved: ULONG): DWord; stdcall;
 PID, TableSize: DWORD;
 Snapshot: THandle;
 FExtendedTcpTable : PMIB_TCPTABLE_OWNER_PID;
 AppName: string;
 Port: Cardinal;
begin
 dllHandle := LoadLibrary('iphlpapi.dll'); //DLL'i hafızaya yükle
 if dllHandle = 0 then Exit;

 GetExtendedTcpTable := GetProcAddress(dllHandle, 'GetExtendedTcpTable');
 if not Assigned(GetExtendedTcpTable) then Exit; // Kullanmak istediğimiz API bu DLLde yok ise çık

 Memo1.Lines.BeginUpdate;
 Memo1.Lines.Clear;
 try
   TableSize := 0;
   if GetExtendedTcpTable(nil, @TableSize, False, AF_INET, 5, 0) <> ERROR_INSUFFICIENT_BUFFER then //API'yi kullanmak için hafızada ne kadar yere ihtiyaç duyacağız? TableSize bunu bize verecek
     Exit; // Hafızada yeterli yer yok ise çık
   try
     GetMem(FExtendedTcpTable, TableSize);
     SnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
     if GetExtendedTcpTable(FExtendedTcpTable, @TableSize, TRUE, AF_INET, 5, 0) = NO_ERROR then
       for i := 0 to FExtendedTcpTable.dwNumEntries - 1 do
       begin
         PID := FExtendedTcpTable.Table[i].dwOwningPid;
         AppName := GetPidName(SnapShot, PID); // TCP bağlantı yapmış olan uygulamanın adı
         Port := FExtendedTcpTable.Table[i].dwLocalPort; // Uygulamanın kullandığı port
         Memo1.Lines.Add(Format('%s [%d]', [AppName, Port]));
       end;
   finally
     FreeMem(FExtendedTcpTable);
   end;
 finally
   Memo1.Lines.EndUpdate;
 end;
end;

pGGvbr.png

Dipçe: UDP ile kullanılan portları tespit etmek için aynı yöntemi Linkleri Görebilmeniz İçin Giriş yap veya Üye OlLinkleri Görebilmeniz İçin Giriş yap veya Üye OlAPIsi ile kullanmak gerekir.
There's no place like 127.0.0.1
WWW
Cevapla
#3
Her iki yöntem içinde teşekkürler.
Cevapla

Konuyu Paylaş : facebook gplus twitter





Konuyu Okuyanlar: 1 Ziyaretçi