关于如何捕获连接本机的远程IP地址 关于如何捕获连接本机的远程IP地址:我本机上有SOCKET编写服务端,远程连接上的客户端.(因为原软件的代码已经不在,无法进行改动.)现我想另外在写个程序,捕获连接本服务端的IP地址,如何实现? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 // 最好的方法, 调用 GetExtendedTcpTable()const // const for GetExtendedTcpTable 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; TCP_TABLE_BASIC_LISTENER = 0; TCP_TABLE_BASIC_CONNECTIONS = 1; TCP_TABLE_BASIC_ALL = 2; TCP_TABLE_OWNER_PID_LISTENER = 3; TCP_TABLE_OWNER_PID_CONNECTIONS = 4; TCP_TABLE_OWNER_PID_ALL = 5; TCP_TABLE_OWNER_MODULE_LISTENER = 6; TCP_TABLE_OWNER_MODULE_CONNECTIONS = 7; TCP_TABLE_OWNER_MODULE_ALL = 8; UDP_TABLE_BASIC =0; UDP_TABLE_OWNER_PID = 1; UDP_TABLE_OWNER_MODULE = 2; ERROR_INSUFFICIENT_BUFFER = 122; MIB_IF_OPER_STATUS_CONNECTING = 3; MIB_IF_OPER_STATUS_CONNECTED = 4; MIB_IF_OPER_STATUS_OPERATIONAL = 5; MIB_IF_ADMIN_STATUS_UP = 1; MIB_IF_ADMIN_STATUS_DOWN = 2; MIB_IF_ADMIN_STATUS_TESTING = 3;type // type for GetExtendedTcpTable TMIB_TCPROW_OWNER_PID = Record dwState: DWORD; dwLocalAddr: DWORD; dwLocalPort: DWORD; dwRemoteAddr: DWORD; dwRemotePort: DWORD; dwOwningPid: DWORD; end; PMIB_TCPROW_OWNER_PID = ^TMIB_TCPROW_OWNER_PID; TMIB_TCPTABLE_OWNER_PID = Record dwNumEntries: DWORD; table: array [0..999] of TMIB_TCPROW_OWNER_PID; end; PMIB_TCPTABLE_OWNER_PID = ^TMIB_TCPTABLE_OWNER_PID;var ptcp: PMIB_TCPTABLE_OWNER_PID; dwsize: DWORD; i: integer;begin dwsize := 0; if GetExtendedTcpTable(ptcp, @dwsize, True, AF_INET, TCP_TABLE_OWNER_PID_CONNECTIONS, 0) = ERROR_INSUFFICIENT_BUFFER then ptcp := AllocMem(dwsize) else exit; PIDList.Clear(); CntList.Clear(); if GetExtendedTcpTable(ptcp, @dwsize, True, AF_INET, TCP_TABLE_OWNER_PID_CONNECTIONS, 0) = 0 then begin for i := 0 to ptcp.dwNumEntries-1 do with ptcp.table[i] do // table[i]对应一个连接 // 此处对连接的属性进行判断...... 不好意思, 上面有两条语句你要删除PIDList.Clear();CntList.Clear(); 用Dependency查看一个DLL的问题 在Memo中,用代码怎么控制我要求的串处于选中状态? 讨论网络游戏封外挂的手段和实现思路(灌水的不要进). Delphi cxGrid 单元格颜色 设定 急购一中学教务管理系统和图书管理系统 关于程序到了不同分辨率下的显示问题! SQL Server 急! 怎样让opendialog可以多选文件 放分庆祝,为我自己写的两次加密程序! 急:如何得到本级的IP地址??? 急急急急急急 Indy10的DirectoryListing的问题,熟悉的进来拿分!!! 如何取远程FTP服务器上EXE文件的版本号?
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;
TCP_TABLE_BASIC_LISTENER = 0;
TCP_TABLE_BASIC_CONNECTIONS = 1;
TCP_TABLE_BASIC_ALL = 2;
TCP_TABLE_OWNER_PID_LISTENER = 3;
TCP_TABLE_OWNER_PID_CONNECTIONS = 4;
TCP_TABLE_OWNER_PID_ALL = 5;
TCP_TABLE_OWNER_MODULE_LISTENER = 6;
TCP_TABLE_OWNER_MODULE_CONNECTIONS = 7;
TCP_TABLE_OWNER_MODULE_ALL = 8;
UDP_TABLE_BASIC =0;
UDP_TABLE_OWNER_PID = 1;
UDP_TABLE_OWNER_MODULE = 2;
ERROR_INSUFFICIENT_BUFFER = 122; MIB_IF_OPER_STATUS_CONNECTING = 3;
MIB_IF_OPER_STATUS_CONNECTED = 4;
MIB_IF_OPER_STATUS_OPERATIONAL = 5; MIB_IF_ADMIN_STATUS_UP = 1;
MIB_IF_ADMIN_STATUS_DOWN = 2;
MIB_IF_ADMIN_STATUS_TESTING = 3;type // type for GetExtendedTcpTable
TMIB_TCPROW_OWNER_PID = Record
dwState: DWORD;
dwLocalAddr: DWORD;
dwLocalPort: DWORD;
dwRemoteAddr: DWORD;
dwRemotePort: DWORD;
dwOwningPid: DWORD;
end;
PMIB_TCPROW_OWNER_PID = ^TMIB_TCPROW_OWNER_PID; TMIB_TCPTABLE_OWNER_PID = Record
dwNumEntries: DWORD;
table: array [0..999] of TMIB_TCPROW_OWNER_PID;
end;
PMIB_TCPTABLE_OWNER_PID = ^TMIB_TCPTABLE_OWNER_PID;
var
ptcp: PMIB_TCPTABLE_OWNER_PID;
dwsize: DWORD;
i: integer;
begin
dwsize := 0;
if GetExtendedTcpTable(ptcp, @dwsize, True, AF_INET,
TCP_TABLE_OWNER_PID_CONNECTIONS, 0) = ERROR_INSUFFICIENT_BUFFER then
ptcp := AllocMem(dwsize)
else
exit;
PIDList.Clear();
CntList.Clear();
if GetExtendedTcpTable(ptcp, @dwsize, True, AF_INET,
TCP_TABLE_OWNER_PID_CONNECTIONS, 0) = 0 then
begin
for i := 0 to ptcp.dwNumEntries-1 do
with ptcp.table[i] do // table[i]对应一个连接
// 此处对连接的属性进行判断
......
PIDList.Clear();
CntList.Clear();