如何查看本机有哪些端口被打开? 编程实现,不是用netstat -a命令如果能得到打开此端口的进程的信息,再送200分 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 从1开始循环,自己建立Socket,然后绑定端口,不成功的就是已经在使用的。也不知道这样行不行,呵呵。 >>从1开始循环,自己建立Socket,然后绑定端口,不成功的就是已经在使用的。这个肯定是不行地~~~~~ >>我有個例子,但是忘了,明天再給你帶來.行不?現在上班OK, Thanks 获得当前系统的Tcp所有打开端口及IP地址 提交日期:2003-11-22 作者:cjsh 关键词:TCP 端口 IP地址 Ip Helper API //GetTcpTable函数单元unit untIPHLPAPI;interfaceusesWindows, sysutils, WinSock;typeEIpHlpError = class(Exception);//----------------TCP结构------------------------------------------------PTMibTCPRow = ^TMibTCPRow;TMibTCPRow = packed recorddwState : DWORD;//状态dwLocalAddr : DWORD;//本地IP地址dwLocalPort : DWORD;//本地端口号dwRemoteAddr: DWORD;//远程IP地址dwRemotePort: DWORD;//远程端口号end;//PTMibTCPTable = ^TMibTCPTable;TMibTCPTable = packed recorddwNumEntries : DWORD; //Tcp打开的数量Table : array[0..0] of TMibTCPRow;end;//------------------从IPHLPAPI.DLL输入的API函数----------------------------function GetTcpTable(pTcpTable: PTMibTCPTable; var pdwSize: DWORD;bOrder: BOOL): DWORD; stdcall;//转换成IP地址形式function IpAddressToString(Addr: DWORD): string;//GetTcpTable的实现过程procedure VVGetTcpTable(var pTcpTable: PTMibTCPTable; var dwSize: DWORD;const bOrder: BOOL);//转换成端口号Function GetTcpPortNumber(aDWord: DWord): Longint;implementationresourcestringsNotImplemented = ‘Function %s is not implemented.‘;sInvalidParameter = ‘Function %s. Invalid parameter‘;sNoData = ‘Function %s. No adapter information exists for the local computer.‘;sNotSupported = ‘Function %s is not supported by the operating system.‘;constiphlpapilib = ‘iphlpapi.dll‘;function GetTcpTable; external iphlpapilib name ‘GetTcpTable‘;function IpAddressToString(Addr: DWORD): string;varInAddr: TInAddr;beginInAddr.S_addr := Addr;Result := inet_ntoa(InAddr);end;procedure IpHlpError(const FunctionName: string; ErrorCode: DWORD);begincase ErrorCode ofERROR_INVALID_PARAMETER :raise EIpHlpError.CreateFmt(sInvalidParameter, [FunctionName]);ERROR_NO_DATA :raise EIpHlpError.CreateFmt(sNoData, [FunctionName]);ERROR_NOT_SUPPORTED :raise EIpHlpError.CreateFmt(sNotSupported, [FunctionName]);else ;RaiseLastWin32Error;end;end;procedure VVGetTcpTable(var pTcpTable: PTMibTCPTable; var dwSize: DWORD;const bOrder: BOOL);varRes: DWORD;beginpTcpTable := Nil;dwSize := 0;if @GetTcpTable = Nil thenraise EIpHlpError.CreateFmt(sNotImplemented, [‘GetTcpTable‘]);Res := GetTcpTable(pTcpTable, dwSize, bOrder);if Res = ERROR_INSUFFICIENT_BUFFER thenbeginGetmem(pTcpTable, dwSize);FillChar(pTcpTable^, dwSize, #0);Res := GetTcpTable(pTcpTable, dwSize, bOrder);end;if Res <> NO_ERROR thenIpHlpError(‘GetTcpTable‘, Res);end;Function GetTcpPortNumber(aDWord: DWord): Longint;beginResult := Trunc(aDWord / 256 + (aDWord Mod 256) * 256);end;end. //演示例子procedure TFmIpTest.BtGetTcpTableClick(Sender: TObject);varpTcpTable: PMibTcpTable;dwSize: DWORD;i: integer;beginMemo1.Lines.Add(‘GetTcpTable‘);VVGetTcpTable(pTcpTable, dwSize, False);if pTcpTable <> nil thentryMemo1.Lines.Add(‘ NumEntries: ‘ + IntToStr(pTcpTable^.dwNumEntries));Memo1.Lines.Add(‘ Local Address Port Remote Address Port State‘);for i := 0 to pTcpTable^.dwNumEntries dowith pTcpTable^.table[i], Memo1.Lines dobeginAdd(Format(‘ %15s %5d %15s %5d %5d‘, [IpAddressToString(dwLocalAddr),GetTcpPortNumber(dwLocalPort), IpAddressToString(dwRemoteAddr),GetTcpPortNumber(dwRemotePort), dwState]));end;finallyFreemem(pTcpTable);end;end; http://nssoft.net/showdoc.asp?did=843 我这里有一个非常完整的连接察看程序,可以察看有哪些程序打开了哪些端口,数据收发流量等等信息,推荐下载,但是是VB的,楼主可以参考一下。http://www.applevb.com/sourcecode/XP%20connector.zip 貼上來太麻煩,請移步去我的網絡硬盤下載吧.http://sail2000.ys168.com/進入 Other 目錄,找 Ports_Mapp.rar 這個壓縮包.這個不是我寫的,隻是以前找例子的時候找的. 用这个两个函数DWORD GetTcpTable(PMIB_TCPTABLE pTcpTable, DWORD dwSize, BOOL bOrder);DWORD GetUdpTable(PMIB_UdpTABLE pUdpTable, DWORD dwSize, BOOL bOrder);功能和netstat 一样 谢谢各位呵呵,主动要分的都给了,矜持的就没有分了~~~lemon_wei(soft_fans) 你说的TechnoFantasy已经给出了实现代码。sailxia(小帆)到这个帖子领分:http://community.csdn.net/Expert/topic/4071/4071990.xml?temp=.5136682 为什么TShockwaveFlash播放flash 会卡住不动,总是停在某一帧 百思不得其解。。。望指路 進度條(與數據庫有關) 可否在线程执行时,在主进程中修改线程的值? 高分求书 在金山音霸中有一个混合声道,在delphi中怎么实现,快,救救我吧! 急!!一个非常简单的问题!! 请帮我回忆一下! “关于Corba问题”已解决(renzhm),291分完全送出,xzgyb(老达摩)请到这里领分! 这里有没有湖南的自考计算机的兄弟啊? dephi 中vf dbf 如何导入?,客户端没有dbf !!无标题窗口的拖动问题,不是一般论坛里面讨论的!
也不知道这样行不行,呵呵。
这个肯定是不行地~~~~~
OK, Thanks
提交日期:2003-11-22 作者:cjsh
关键词:TCP 端口 IP地址 Ip Helper API
//GetTcpTable函数单元
unit untIPHLPAPI;interfaceuses
Windows, sysutils, WinSock;type
EIpHlpError = class(Exception);
//----------------TCP结构------------------------------------------------
PTMibTCPRow = ^TMibTCPRow;
TMibTCPRow = packed record
dwState : DWORD;//状态
dwLocalAddr : DWORD;//本地IP地址
dwLocalPort : DWORD;//本地端口号
dwRemoteAddr: DWORD;//远程IP地址
dwRemotePort: DWORD;//远程端口号
end;
//
PTMibTCPTable = ^TMibTCPTable;
TMibTCPTable = packed record
dwNumEntries : DWORD; //Tcp打开的数量
Table : array[0..0] of TMibTCPRow;
end;//------------------从IPHLPAPI.DLL输入的API函数----------------------------
function GetTcpTable(pTcpTable: PTMibTCPTable; var pdwSize: DWORD;
bOrder: BOOL): DWORD; stdcall;//转换成IP地址形式
function IpAddressToString(Addr: DWORD): string;
//GetTcpTable的实现过程
procedure VVGetTcpTable(var pTcpTable: PTMibTCPTable; var dwSize: DWORD;
const bOrder: BOOL);
//转换成端口号
Function GetTcpPortNumber(aDWord: DWord): Longint;implementationresourcestring
sNotImplemented = ‘Function %s is not implemented.‘;
sInvalidParameter = ‘Function %s. Invalid parameter‘;
sNoData = ‘Function %s. No adapter information exists for the local computer.‘;
sNotSupported = ‘Function %s is not supported by the operating system.‘;
const
iphlpapilib = ‘iphlpapi.dll‘;function GetTcpTable; external iphlpapilib name ‘GetTcpTable‘;
function IpAddressToString(Addr: DWORD): string;
var
InAddr: TInAddr;
begin
InAddr.S_addr := Addr;
Result := inet_ntoa(InAddr);
end;procedure IpHlpError(const FunctionName: string; ErrorCode: DWORD);
begin
case ErrorCode of
ERROR_INVALID_PARAMETER :
raise EIpHlpError.CreateFmt(sInvalidParameter, [FunctionName]);
ERROR_NO_DATA :
raise EIpHlpError.CreateFmt(sNoData, [FunctionName]);
ERROR_NOT_SUPPORTED :
raise EIpHlpError.CreateFmt(sNotSupported, [FunctionName]);
else ;
RaiseLastWin32Error;
end;
end;procedure VVGetTcpTable(var pTcpTable: PTMibTCPTable; var dwSize: DWORD;
const bOrder: BOOL);
var
Res: DWORD;
begin
pTcpTable := Nil;
dwSize := 0;
if @GetTcpTable = Nil then
raise EIpHlpError.CreateFmt(sNotImplemented, [‘GetTcpTable‘]);
Res := GetTcpTable(pTcpTable, dwSize, bOrder);
if Res = ERROR_INSUFFICIENT_BUFFER then
begin
Getmem(pTcpTable, dwSize);
FillChar(pTcpTable^, dwSize, #0);
Res := GetTcpTable(pTcpTable, dwSize, bOrder);
end;
if Res <> NO_ERROR then
IpHlpError(‘GetTcpTable‘, Res);
end;Function GetTcpPortNumber(aDWord: DWord): Longint;
begin
Result := Trunc(aDWord / 256 + (aDWord Mod 256) * 256);
end;end. //演示例子
procedure TFmIpTest.BtGetTcpTableClick(Sender: TObject);
var
pTcpTable: PMibTcpTable;
dwSize: DWORD;
i: integer;
begin
Memo1.Lines.Add(‘GetTcpTable‘);
VVGetTcpTable(pTcpTable, dwSize, False);
if pTcpTable <> nil then
try
Memo1.Lines.Add(‘ NumEntries: ‘ + IntToStr(pTcpTable^.dwNumEntries));
Memo1.Lines.Add(‘ Local Address Port Remote Address Port State‘);
for i := 0 to pTcpTable^.dwNumEntries do
with pTcpTable^.table[i], Memo1.Lines do
begin
Add(Format(‘ %15s %5d %15s %5d %5d‘, [IpAddressToString(dwLocalAddr),
GetTcpPortNumber(dwLocalPort), IpAddressToString(dwRemoteAddr),
GetTcpPortNumber(dwRemotePort), dwState]));
end;
finally
Freemem(pTcpTable);
end;
end;
http://nssoft.net/showdoc.asp?did=843
http://sail2000.ys168.com/
進入 Other 目錄,找 Ports_Mapp.rar 這個壓縮包.這個不是我寫的,隻是以前找例子的時候找的.
DWORD GetTcpTable(PMIB_TCPTABLE pTcpTable, DWORD dwSize, BOOL bOrder);
DWORD GetUdpTable(PMIB_UdpTABLE pUdpTable, DWORD dwSize, BOOL bOrder);
功能和netstat 一样
呵呵,主动要分的都给了,矜持的就没有分了~~~
lemon_wei(soft_fans) 你说的TechnoFantasy已经给出了实现代码。
sailxia(小帆)到这个帖子领分:
http://community.csdn.net/Expert/topic/4071/4071990.xml?temp=.5136682