Hab mal versucht das wichtigste C-Zeugs von dort (netstatp.c + netstatc.h) in Delphi zu übersetzen aber irgendwie komm ich nicht an die richtigen werte ran bzw weiß ich nicht wie ich die Dwords als
ip darstellen kann und wie ich die ports richtig auslese... Vielleicht weiß ja jemand weiter..
Delphi-Quellcode:
type
MIB_TCPEXROW = record
dwState: DWord; // state of the connection
dwLocalAddr: DWord; // address on local computer
dwLocalPort: DWord; // port number on local computer
dwRemoteAddr: DWord; // address on remote computer
dwRemotePort: DWord; // port number on remote computer
dwProcessId: DWord;
end;
PTCPTable = ^MIB_TCPEXTABLE;
MIB_TCPEXTABLE = record
dwNumEntries: DWord;
table: Array [0..20] of MIB_TCPEXROW; //20 ist mein Anywert - bestimmt falsch (MIB_TCPEXROW table[ANY_SIZE]);
end;
TGetTCPTable = function(PMIBTCPEXTTABLE: pTCPTable; Order: Boolean; heap: Cardinal; zero: DWord; Flags: DWord): DWord; stdcall;
[...]
var
lib: Cardinal;
[...]
procedure TForm1.FormCreate(Sender: TObject);
begin
lib := LoadLibrary('iphlpapi');
if lib <> 0 then
GetTCPTable := GetProcAddress(lib, 'AllocateAndGetTcpExTableFromStack');
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if lib <> 0 then FreeLibrary(lib);
end;
procedure TForm1.Button1Click(Sender: TObject);
var tmptable: PTCPTable;
begin
new(tmptable);
GetTCPTable(tmptable, True, GetProcessHeap, 2, 2);
Memo1.Clear;
for count := 0 to length(tmptable^.table) - 1 do
begin
Memo1.Lines.Add(inttostr(tmptable^.table[count].dwLocalAddr)); //irgendwie komm ich hier nicht weiter also wie ich an die infos ran komme - denk mal die sind auch falsch ausgelesen..
end;
Dispose(tmptable);
end;