搜索文章:

首页  |  Java技术  |  Asp.net  |  Asp编程  |  VC/C++  |  Delphi  |  VB编程

在xp和2003下察看端口对应的进程

==========================================*/
我们都知道fport.exe只能在2000下运行,那么有没有办法在xp和2003下察看端口对应的信息呢?答案是肯定的:)
首先让我们来熟悉几条命令和程序的用法吧:
netstat -ano//这个命令是列出当前网络连接状况,并且列出端口对应程序的pid
tlist.exe //在2000和xp安装盘的support\tools目录下,support.cab 压缩包自带的一个工具,可以查看指定pid对应的进程信息
让我们来看看运行效果吧
以下是netstat-ano在cmd中的运行结果:

active connections

protolocal addressforeign addressstate pid
tcp0.0.0.0:42 0.0.0.0:0listening 1524
tcp0.0.0.0:80 0.0.0.0:0listening 1616
tcp0.0.0.0:1350.0.0.0:0listening 660
tcp0.0.0.0:4450.0.0.0:0listening 4
tcp0.0.0.0:1025 0.0.0.0:0listening 496
tcp0.0.0.0:1026 0.0.0.0:0listening 984
tcp0.0.0.0:1031 0.0.0.0:0listening 1576
tcp0.0.0.0:1033 0.0.0.0:0listening 1524
tcp0.0.0.0:1433 0.0.0.0:0listening 1316
tcp0.0.0.0:1801 0.0.0.0:0listening 1576
tcp0.0.0.0:2103 0.0.0.0:0listening 1576
tcp0.0.0.0:2105 0.0.0.0:0listening 1576
tcp0.0.0.0:2107 0.0.0.0:0listening 1576
tcp0.0.0.0:3389 0.0.0.0:0listening 724
tcp0.0.0.0:4899 0.0.0.0:0listening 2860
tcp127.0.0.1:439580.0.0.0:0listening 1476
tcp202.194.4.218:21 0.0.0.0:0listening 1476
tcp202.194.4.218:80 202.194.4.218:3768 established 4
tcp202.194.4.218:1433 211.233.12.64:8374 time_wait 0
tcp202.194.4.218:1433 211.233.12.64:8716 time_wait 0
tcp202.194.4.218:1433 211.233.12.64:9075 time_wait 0
tcp202.194.4.218:1433 211.233.12.64:9430 time_wait 0
tcp202.194.4.218:1433 211.233.12.64:9785 time_wait 0
tcp202.194.4.218:1433 211.233.12.64:10750time_wait 0
tcp202.194.4.218:1433 211.233.12.64:11091time_wait 0
tcp202.194.4.218:1433 211.233.12.64:11418time_wait 0
tcp202.194.4.218:1433 211.233.12.64:11739time_wait 0
tcp202.194.4.218:1433 211.233.12.64:12093time_wait 0
tcp202.194.4.218:1433 211.233.12.64:12452time_wait 0
tcp202.194.4.218:1433 211.233.12.64:15486time_wait 0
tcp202.194.4.218:1433 211.233.12.64:15851time_wait 0
tcp202.194.4.218:1433 211.233.12.64:16223time_wait 0
tcp202.194.4.218:1433 211.233.12.64:16580time_wait 0
tcp202.194.4.218:1433 211.233.12.64:16928time_wait 0
tcp202.194.4.218:1433 211.233.12.64:17283time_wait 0
tcp202.194.4.218:1433 211.233.12.64:17635time_wait 0
tcp202.194.4.218:1433 211.233.12.64:18005time_wait 0
tcp202.194.4.218:1433 211.233.12.64:18372time_wait 0
tcp202.194.4.218:1433 211.233.12.64:18746time_wait 0
tcp202.194.4.218:1433 211.233.12.64:19077time_wait 0
tcp202.194.4.218:1433 211.233.12.64:19453time_wait 0
tcp202.194.4.218:1433 211.233.12.64:19827time_wait 0
tcp202.194.4.218:1433 211.233.12.64:20199time_wait 0
tcp202.194.4.218:1433 211.233.12.64:20601time_wait 0
tcp202.194.4.218:1433 211.233.12.64:20951time_wait 0
tcp202.194.4.218:1433 211.233.12.64:21295time_wait 0
tcp202.194.4.218:1433 211.233.12.64:22194time_wait 0
tcp202.194.4.218:1433 211.233.12.64:22505time_wait 0
tcp202.194.4.218:1433 211.233.12.64:23517time_wait 0
tcp202.194.4.218:1433 211.233.12.64:23883time_wait 0
tcp202.194.4.218:1433 211.233.12.64:24245time_wait 0
tcp202.194.4.218:1433 211.233.12.64:24584time_wait 0
tcp202.194.4.218:1433 211.233.12.64:24920time_wait 0
tcp202.194.4.218:1433 211.233.12.64:25257time_wait 0
tcp202.194.4.218:1433 211.233.12.64:25676time_wait 0
tcp202.194.4.218:1433 211.233.12.64:26009time_wait 0
tcp202.194.4.218:1433 211.233.12.64:26345time_wait 0
tcp202.194.4.218:1433 211.233.12.64:26719time_wait 0
tcp202.194.4.218:1433 211.233.12.64:27724time_wait 0
tcp202.194.4.218:1433 211.233.12.64:28607time_wait 0
tcp202.194.4.218:1433 211.233.12.64:28950time_wait 0
tcp202.194.4.218:1433 211.233.12.64:29280time_wait 0
tcp202.194.4.218:1433 211.233.12.64:29582time_wait 0
tcp202.194.4.218:1433 211.233.12.64:29931time_wait 0
tcp202.194.4.218:1433 211.233.12.64:30299time_wait 0
tcp202.194.4.218:1433 211.233.12.64:30635time_wait 0
tcp202.194.4.218:1433 211.233.12.64:31003time_wait 0
tcp202.194.4.218:1433 211.233.12.64:31965time_wait 0
tcp202.194.4.218:1433 211.233.12.64:32317time_wait 0
tcp202.194.4.218:1433 211.233.12.64:33716time_wait 0
tcp202.194.4.218:1433 211.233.12.64:34076time_wait 0
tcp202.194.4.218:1433 211.233.12.64:34447time_wait 0
tcp202.194.4.218:1433 211.233.12.64:34735fin_wait_11316
tcp202.194.4.218:3389 219.218.104.91:1065established 724
tcp202.194.4.218:3768 202.194.4.218:80 established 3172
tcp202.194.4.218:3771 66.94.230.51:80time_wait 0
tcp202.194.4.218:3772 66.94.230.37:80time_wait 0
udp0.0.0.0:42 *:*1524
udp0.0.0.0:445*:*4
udp0.0.0.0:500*:*496
udp0.0.0.0:1029 *:*860
udp0.0.0.0:1030 *:*1576
udp0.0.0.0:1032 *:*1524
udp0.0.0.0:1434 *:*1316
udp0.0.0.0:1645 *:*876
udp0.0.0.0:1646 *:*876
udp0.0.0.0:1812 *:*876
udp0.0.0.0:1813 *:*876
udp0.0.0.0:1837 *:*860
udp0.0.0.0:1886 *:*860
udp0.0.0.0:1887 *:*860
udp0.0.0.0:1888 *:*860
udp0.0.0.0:1889 *:*860
udp0.0.0.0:1890 *:*860
udp0.0.0.0:1891 *:*860
udp0.0.0.0:1892 *:*860
udp0.0.0.0:3527 *:*1576
udp0.0.0.0:4000 *:*2840
udp0.0.0.0:4500 *:*496
udp0.0.0.0:6000 *:*2840
udp0.0.0.0:6001 *:*2840
udp127.0.0.1:123*:*876
udp127.0.0.1:1027 *:*876
udp127.0.0.1:1028 *:*876
udp127.0.0.1:1180 *:*2496
udp127.0.0.1:2920 *:*2476
udp127.0.0.1:3546 *:*1904
udp127.0.0.1:3798 *:*3400
udp127.0.0.1:3877 *:*2312
udp202.194.4.218:123*:*876

最后一列就是pid了
//---------------------------------------------------------------------------
以下是tlist.exe的运行结果:tlist.exe的用法是:tlist.exe pid
譬如:tlist.exe 1524 其结果如下:
1524 wins.exe
cwd: c:\windows\system32\
cmdline: c:\windows\system32\wins.exe
virtualsize:77372 kb peakvirtualsize:78212 kb
workingsetsize:2604 kb peakworkingsetsize:6768 kb
numberofthreads: 18
1528 win32startaddr:0x0101249a lasterr:0x000003e5 state:waiting
1544 win32startaddr:0x77d7570d lasterr:0x000003e5 state:waiting
1828 win32startaddr:0x69a6ef20 lasterr:0x00000000 state:waiting
1832 win32startaddr:0x69a6ef20 lasterr:0x00000000 state:waiting
1836 win32startaddr:0x69a6ef20 lasterr:0x00000000 state:waiting
1840 win32startaddr:0x69a6ef20 lasterr:0x00000000 state:waiting
1972 win32startaddr:0x01003e1a lasterr:0x00000000 state:waiting
1976 win32startaddr:0x01003fc7 lasterr:0x00000000 state:waiting
1980 win32startaddr:0x01007b95 lasterr:0x00000000 state:waiting
1984 win32startaddr:0x0101d872 lasterr:0x00000000 state:waiting
1988 win32startaddr:0x01020137 lasterr:0x00000000 state:waiting
1996 win32startaddr:0x01014d48 lasterr:0x00000000 state:waiting
2000 win32startaddr:0x01013a15 lasterr:0x00000000 state:waiting
2004 win32startaddr:0x01006a10 lasterr:0x00000000 state:waiting
2008 win32startaddr:0x77c30840 lasterr:0x00000102 state:waiting
2012 win32startaddr:0x77c30840 lasterr:0x00000000 state:waiting
2508 win32startaddr:0x06001cb7 lasterr:0x00000000 state:waiting
2272 win32startaddr:0x00000000 lasterr:0x000003f0 state:waiting
 5.2.3790.99 shp0x01000000wins.exe
5.2.3790.0 shp0x77f30000ntdll.dll
5.2.3790.0 shp0x77e10000kernel32.dll
7.0.3790.0 shp0x77b70000msvcrt.dll
5.2.3790.0 shp0x77d60000advapi32.dll
5.2.3790.137 shp0x77c20000rpcrt4.dll
5.2.3790.0 shp0x71ba0000netapi32.dll
 5.2.3790.73 shp0x77cd0000user32.dll
5.2.3790.0 shp0x77bd0000gdi32.dll
5.2.3790.0 shp0x71b60000ws2_32.dll
5.2.3790.0 shp0x71b50000ws2help.dll
5.2.3790.138 shp0x77150000ole32.dll
5.2.3790.0 shp0x5bb80000vssapi.dll
3.5.2283.0 shp0x769c0000atl.dll
5.2.3790.0 shp0x770d0000oleaut32.dll
5.2.3790.0 shp0x76180000imm32.dll
5.2.3790.0 shp0x63090000lpk.dll
1.421.3790.0 shp0x72ee0000usp10.dll
5.2.3790.0 shp0x71a80000mswsock.dll
5.2.3790.0 shp0x71a40000wshtcpip.dll
5.2.3790.0 shp0x76e30000dnsapi.dll
5.2.3790.0 shp0x76ed0000winrnr.dll
5.2.3790.0 shp0x76e70000wldap32.dll
5.2.3790.0 shp0x76ee0000rasadhlp.dll
5.2.3790.0 shp0x699b0000esent.dll
5.2.3790.0 shp0x5d000000samlib.dll
2001.12.4720.130 s0x76ef0000clbcatq.dll
2001.12.4720.0 shp0x76f70000comres.dll
5.2.3790.0 shp0x77b60000version.dll
2001.12.4720.130 s0x76a10000es.dll
5.2.3790.0 shp0x76eb0000secur32.dll
 16.0.0.19 shp0x06000000apihook.dll
16.2.0.6 shp0x05000000memmon.dll
很显然cmdline:后面的就是程序的路径
到这里,聪明的你一定想到方法了,其实只要找到端口对应的进程的pid,再根据pid找到程序具体的路径就行了
我们所要实现的工作就是自动化而已
下面讲下大体思路:
首先我们执行以下两条命令:
netstat -anofind "listening">tcplisten.txt //获得tcp监听端口列表
netstat -anofind "udp">udplisten.txt //获得udp监听端口列表
//---------------------------------------------------------
以下是netstat -anofind "listening">tcplisten.txt执行结果,打开tcplisten.txt 可以看到:
tcp0.0.0.0:42 0.0.0.0:0listening 1524
tcp0.0.0.0:80 0.0.0.0:0listening 1616
tcp0.0.0.0:1350.0.0.0:0listening 660
tcp0.0.0.0:4450.0.0.0:0listening 4
tcp0.0.0.0:1025 0.0.0.0:0listening 496
tcp0.0.0.0:1026 0.0.0.0:0listening 984
tcp0.0.0.0:1031 0.0.0.0:0listening 1576
tcp0.0.0.0:1033 0.0.0.0:0listening 1524
tcp0.0.0.0:1433 0.0.0.0:0listening 1316
tcp0.0.0.0:1801 0.0.0.0:0listening 1576
tcp0.0.0.0:2103 0.0.0.0:0listening 1576
tcp0.0.0.0:2105 0.0.0.0:0listening 1576
tcp0.0.0.0:2107 0.0.0.0:0listening 1576
tcp0.0.0.0:3389 0.0.0.0:0listening 724
tcp0.0.0.0:4899 0.0.0.0:0listening 2860
tcp127.0.0.1:439580.0.0.0:0listening 1476
tcp202.194.4.218:21 0.0.0.0:0listening 1476
//--------------------------------------------------------
以下是netstat -anofind "udp">udplisten.txt 执行结果,打开udplisten.txt 可以看到:
udp0.0.0.0:42 *:*1524
udp0.0.0.0:445*:*4
udp0.0.0.0:500*:*496
udp0.0.0.0:1029 *:*860
udp0.0.0.0:1030 *:*1576
udp0.0.0.0:1032 *:*1524
udp0.0.0.0:1434 *:*1316
udp0.0.0.0:1645 *:*876
udp0.0.0.0:1646 *:*876
udp0.0.0.0:1812 *:*876
udp0.0.0.0:1813 *:*876
udp0.0.0.0:1837 *:*860
udp0.0.0.0:1886 *:*860
udp0.0.0.0:1887 *:*860
udp0.0.0.0:1888 *:*860
udp0.0.0.0:1889 *:*860
udp0.0.0.0:1890 *:*860
udp0.0.0.0:1891 *:*860
udp0.0.0.0:1892 *:*860
udp0.0.0.0:3527 *:*1576
udp0.0.0.0:4000 *:*2840
udp0.0.0.0:4500 *:*496
udp0.0.0.0:6000 *:*2840
udp0.0.0.0:6001 *:*2840
udp127.0.0.1:123*:*876
udp127.0.0.1:1027 *:*876
udp127.0.0.1:1028 *:*876
udp127.0.0.1:1180 *:*2496
udp127.0.0.1:2920 *:*2476
udp127.0.0.1:3546 *:*1904
udp127.0.0.1:3798 *:*3400
udp127.0.0.1:3877 *:*2312
udp202.194.4.218:123*:*876
//---------------------------------------------------------
我们只要对这两个文件中的信息处理下就能提取到端口和pid的对应表了
定义如下结构体吧:
//-------------------------------
typedef struct _porttoprocess{
 cstring port;
cstring protocol;
cstring pid;
cstring procname;
cstring procpath;
}porttoprocess;
//-------------------------------
porttoprocess porttoprocess[100] //声明一百个结构体应该够用了
第一步通过处理上述两个文件来实例化porttoprocess数组中的port,protocol,pid项,并返回总的portnum;
第二步通过进程快照获得pid对应的程序名实例化结构体中的procname项;
第三步先按
tlist.exe pid1find "cmdline:">>procinfo.txt
tlist.exe pid2find "cmdline:">>procinfo.txt
tlist.exe pid3find "cmdline:">>procinfo.txt
.
.
.
.
的格式写成一个bat文件,通过system()函数运行它,得到每个端口对应pid对应的进程信息
接着写个函数从procinfo.txt文件里把信息读出来实例化结构体中的procpath项;最后根据portnum输出结果

原理就这么简单了,具体的看代码吧,附查看程序!在2003和xp下测试成功,vc6.0+2003的编译环境,代码中pcinfor类是个比较
全的类,可以获得系统的详细信息,只要把pcinfor.h和pcinfor.cpp拷贝到你的工程项目中就能用了

程序运行的时候会有cmd窗口弹出,这是因为调用了system()函数所致,在cmd窗口运行完之后程序会等待一段时间(大概20秒),是为了等待bat文件执行完,如果你的机子运行比较慢,可以把原代码的此处修改一下:
void pcinfor::getporttoprocessinfo()
{
int i;
borntcplisten();
bornudplisten();
getlistenport();
findprocname();
findprocpath();
for(i=0;i<20;i++) sleep(1000);
getprocpath();
deletetempfile();
writeprocinfo();
}
循环次数加多点,在重新编译以下就行了!

如果发现bug或者你修改了更好的请给我一份,本人不胜感激:)

//shadow 2004/10/26
//email:dreamshadow@mail.sdu.edu.cn
//http:www.codehome.6600.org

()

相关文章:
© 2006   www.java-asp.net