![]() |
Re: TCPTable liefert falschen Port
Für die lokale IP kannst du das hier verwenden um den rechnernamen herauszufinden:
Delphi-Quellcode:
und für die remote IP das hier:
GetServByPort(dwLocalPort, nil)
Delphi-Quellcode:
versuchs einfach ... bei mir hats geklappt ... ^^ (setz einfach mal den 'schrott' da ein, und schau mal was rauskommt)
GetHostByAddr(PChar(@dwLocalAddr), SizeOf(DWORD), AF_INET)
[edit]und falls es dann immer noch nicht geht: ![]() |
Re: TCPTable liefert falschen Port
Ich willd ie IP ja nichjt auflösen. Ich will erstmal schon eine gescheite IP da stehen haben. Und ob mir der Lionk weiterhilft vage ich zu bezweifeln. Denn das verrückte ist ja, mein erstes Programm mit wietgehend identischen Code liefert keinen Schrott. Irgendwas mache ich anders, aber ich weiß eben nicht was. :evil:
|
Re: TCPTable liefert falschen Port
So, habe den Fehler gefunden:
Delphi-Quellcode:
Da geht irgendwo was schief mit dem Array füllen. Lasse ich den oberen Teil raus und fülle das Array nur mit den UDP Werten klappt alles wunderbar. Nehme ich den TCP Teil hinzu, stimmen sie nicht mehr. Was mache ich also falsch?
function GetIPInfos: IPInfo;
var Error: DWORD; TCPTable: PMibTcpTable; UDPTable: PMibUdptable; NumEntriesTCP: DWORD; NumEntriesUDP: DWORD; dwSize: DWORD; i: Integer; begin NumEntriesTCP := 0; Setlength(result, 0); // dwSize := 0; // Error := GetTcpTable(nil, dwSize, False); // if Error <> ERROR_INSUFFICIENT_BUFFER then // Exit; // GetMem(TCPTable, dwSize); // try // if GetTCPTable(TcpTable, dwSize, TRUE) = NO_ERROR then // begin // if TCPTable <> nil then // begin // NumEntriesTCP := TCPTable.dwNumEntries; // SetLength(result, NumEntriesTCP); // for i := 0 to NumEntriesTCP - 1 do // begin // result[i].Protocol := 'TCP'; // result[i].localIP := TCPTable^.table[i].dwLocalAddr; // result[i].localPort := TCPTable^.table[i].dwlocalPort; // result[i].remoteIP := TCPTable^.table[i].dwRemoteAddr; // if TCPTable^.table[i].dwRemoteAddr = 0 then // TCPTable^.table[i].dwRemotePort := 0; // result[i].remotePort := TCPTable^.table[i].dwRemotePort; // result[i].Status := TCPTable^.table[i].dwState; // end; // end; // end; // finally // FreeMem(TCPTable, dwSize); // end; dwSize := 0; Error := GetUdpTable(nil, dwSize, False); if Error <> ERROR_INSUFFICIENT_BUFFER then exit; GetMem(UDPTable, dwSize); try if GetUdpTable(UDPTable, dwSize, TRUE) = NO_ERROR then begin if UDPTable <> nil then begin NumEntriesUDP := UDPTable.dwNumEntries; SetLength(result, NumEntriesUDP); {SetLength(result, NumEntriesTCP+NumEntriesUDP);} for i := 0 to NumEntriesUDP-1 do {for i := NumEntriesTCP to NumEntriesTCP+ NumEntriesUDP-1 do} begin result[i].Protocol := 'UDP'; result[i].localIP := UDPTable^.table[i].dwLocalAddr; result[i].localPort := UDPTable^.table[i].dwLocalPort; result[i].remoteIP := 0; result[i].remotePort := 0; result[i].Status := 99; end; end; end; finally FreeMem(UDPTable, dwSize); end; end; |
Re: TCPTable liefert falschen Port
Liste der Anhänge anzeigen (Anzahl: 1)
Um es noch mal deutlich zu machen. Das Array wird schon richtig verlängert, aber irgendwie stimmen die Werte dann nicht mehr, die dann da reingeschrieben werden.
Wer es selber noch mal testen will, dem habe ich das Projekt noch mal angehangen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz