双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

问一个函数的用法。getExtendedTcpTable;

huangjacky huangjacky 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
先定义,从msdn转过来的。不知道是否有错。请看

const
ANY_SIZE = 256;
//----------------------------------------------------------------------------
MIB_TCP_STATE_CLOSED = 1;
MIB_TCP_STATE_LISTEN = 2;
MIB_TCP_STATE_SYN_SENT = 3;
MIB_TCP_STATE_SYN_RCVD = 4;
MIB_TCP_STATE_ESTAB = 5;
MIB_TCP_STATE_FIN_WAIT1 = 6;
MIB_TCP_STATE_FIN_WAIT2 = 7;
MIB_TCP_STATE_CLOSE_WAIT = 8;
MIB_TCP_STATE_CLOSING = 9;
MIB_TCP_STATE_LAST_ACK = 10;
MIB_TCP_STATE_TIME_WAIT = 11;
MIB_TCP_STATE_DELETE_TCB = 12;
//------------------------------------------------------------------------------
TTCPTableClass = (TCP_TABLE_BASIC_LISTENER,
TCP_TABLE_BASIC_CONNECTIONS ,
TCP_TABLE_BASIC_ALL,
TCP_TABLE_OWNER_PID_LISTENER ,
TCP_TABLE_OWNER_PID_CONNECTIONS ,
TCP_TABLE_OWNER_PID_ALL ,
TCP_TABLE_OWNER_MODULE_LISTENER,
TCP_TABLE_OWNER_MODULE_CONNECTIONS ,
TCP_TABLE_OWNER_MODULE_ALL
);
TUDPTableClass = (UDP_TABLE_BASIC ,
UDP_TABLE_OWNER_PID ,
UDP_TABLE_OWNER_MODULE
);
MIB_TCPROW_OWNER_PID = record
dwState :DWORD;
dwLocalAddr :DWORD;
dwLocalPort :DWORD;
dwRemoteAddr :DWORD;
dwRemotePort :DWORD;
dwOwningPid :DWORD;
end;
PMIB_TCP_ROW = ^MIB_TCPROW_OWNER_PID;

MIB_TCPTABLE_OWNER_PID = record
dwNumEntries :DWORD;
table :array[0..ANY_SIZE-1] of MIB_TCPROW_OWNER_PID;
end;

PMIB_TCPTABLE_OWNER_PID = ^MIB_TCPTABLE_OWNER_PID;
//----------------------------------------------------------------------------

然后再是导出的2个函数,

{
DWORD GetExtendedTcpTable(
PVOID pTcpTable,
PDWORD pdwSize,
BOOL bOrder,
ULONG ulAf,
TCP_TABLE_CLASS TableClass,
ULONG Reserved
); }
function GetExtendedTcpTable(pTcpTable:PMIB_TCPTABLE_OWNER_PID;
pdwSize:pDWORD;
bOrder:Boolean;
ulAf:Cardinal;
TableClass:TTCPTableClass;
Reserved:Cardinal):DWORD ;
stdcall; external 'iphlpapi.dll' name 'GetExtendedTcpTable';
{
DWORD GetExtendedUdpTable(
PVOID pUdpTable,
PDWORD pdwSize,
BOOL bOrder,
ULONG ulAf,
UDP_TABLE_CLASS TableClass,
ULONG Reserved
);
}
function GetExtendedUdpTable(pTcpTable:Pointer;
pdwSize:pDWORD;
bOrder:Boolean;
ulAf:Cardinal;
TableClass:TUDPTableClass;
Reserved:Cardinal):DWORD ;
stdcall; external 'iphlpapi.dll' name 'GetExtendedUdpTable';

好的。然后是使用,编译没有问题,但是结果就是不乐观。

procedure TBaseSniffer.displayConnections(PID: DWORD);
var
pBuf:PChar;
tcpRow:MIB_TCPROW_OWNER_PID;
adwSize,dResult:DWORD;
tmp:string;
I,num: Integer;
begin
try
FConnections.Clear;//清楚列表
adwSize:=0; //先定义大小为0,来获取真的大小.
dResult:=GetExtendedTcpTable(nil,@adwSize,
True,0,TCP_TABLE_OWNER_PID_CONNECTIONS,0);//跟踪到这里发现dResult不是0 也就是函数调用错误了
if adwSize<>0 then
begin
//分配空间,来获取真的tcp连接表.
GetMem(pBuf,adwSize);
dResult:=GetExtendedTcpTable(PMIB_TCPTABLE_OWNER_PID(pBuf),@adwSize,True,AF_INET,TCP_TABLE_OWNER_PID_ALL,0);
if dResult<>NO_ERROR then
begin
FErrorInfo:='获取TCP列表出错';
doError;
end
else
begin
num:=PMIB_TCPTABLE_OWNER_PID(pBuf)^.dwNumEntries;
if num>0 then
begin
Inc(pBuf,SizeOf(DWORD));
for I := 1 to num - 1 do
begin
tcpRow:=PMIB_TCP_ROw(pBuf)^;
with tcpRow do
if (dwOwningPid=PID)and(dwState in [2,5])and(dwRemoteAddr<>0) then
begin
tmp:='';
tmp:=Format('远程主机:%S,远程端口:%D,本地端口:%D',
[IpAddr2Str(dwRemoteAddr),dwRemotePort,dwLocalPort]);
FConnections.Append(tmp);
end;
Inc(pBuf,SizeOf(MIB_TCPROW_OWNER_PID));
end;
end;
end;
Dec(pBuf,SizeOf(dword)+ num* SizeOf(MIB_TCPROW_OWNER_PID));
FreeMem(pBuf);
end;
finally
end;
end;


郁闷了 请问各位这个函数究竟怎么用。谢谢
getTCPtable的例子我看了一下的。
...全文

相关推荐

TcpConnectionInformationEx:PINvoke 或 GetExtendedTcpTable

TcpConnectionInformationEx 该项目提供了 TcpConnectionInfomation 的实现,由 GetExtendedTcpTable 的 P/Invoke 实现。 参考 Tcp连接信息 获取扩展的TcpTable 谢谢,pinvoke.net!

高晖云

WINDOWS查看TCP网络和进程关联信息程序(附源码)

WINDOWS下的netstat没有-p选项,无法直接查看网络连接和进程的关联关系。好多年前自己手敲了一个查看TCP网络连接和进程关联信息的程序。本资源附带C语言源码,编译的makefile文件和bat脚本。编译环境的话安装好MINGW配置好相关的环境变量即可。目前自己用了几年了,从xp到各版本的SERVER都是可用的。如果碰到问题,可以跟我反馈。希望对大家有帮助。

wb23222

易语言-易语言API调用TCP/UDP查看IP地址IP端口和进程ID的例子

本例子讲解API调用GetExtendedTcpTable和GetExtendedUdpTable实现查看本地连接的TCP和UDP的IP地址IP端口和所占用的进程ID,用途广泛,懂的人自然懂,不多解释。 GetExtendedTcpTable与 GetTcpTable GetTcpTable2 AllocateAndGetTcpExTableFromStack 写法和读法基本一致。 而InternalGetUdpTableWithOwnerPid和AllocateAndGetUdpExTableFromStack不支持查询连接外网的IP 发现只有GetExtendedUdpTable能读外网IP地址但读法还和TCP的不一样,而用网截支持库又太麻烦还容易报毒。

weixin_38699302

API调用TCP/UDP查看IP地址IP端口和进程ID的例子-易语言

本例子讲解API调用GetExtendedTcpTable和GetExtendedUdpTable实现查看本地连接的TCP和UDP的IP地址IP端口和所占用的进程ID,用途广泛,懂的人自然懂,不多解释。 GetExtendedTcpTable与 GetTcpTable GetTcpTable2 AllocateAndGetTcpExTableFromStack 写法和读法基本一致。 而InternalGetUdpTableWithOwnerPid和AllocateAndGetUdpExTableFromStack不支持查询连接外网的IP 发现只有GetExtendedUdpTable能读外网IP地址但读法还和TCP的不一样,而用网截支持库又太麻烦还容易报毒。

weixin_38568031

易语言端口查看器

易语言端口查看器源码,端口查看器,取状态,API_拷贝内存,API_htons,GetExtendedTcpTable

weixin_38631389
评论 4
收藏 已收藏
分享
返回顶部
huangjacky
Windows SDK/API 1,184 成员 22,326 内容