我想监听发往某个程序端口的数据,端口号已知

解决方案 »

  1.   

    2种:
    1:使用替换sock32.dll的方法
    2:自己做端口映射,转发数据
      

  2.   

    gz
    回想就是开一个线程,用sock方法
      

  3.   

    http://cicn.51.net/softdesc.php?softid=65
      

  4.   

    see this,can help you.
    http://www.codeguru.com/network/ipmon.html
      

  5.   

    方法很多:
    1、stub dll方式,你将一个wsock32.dll放在目标程序相同的目录下面,你的wsock32.dll输出和系统wsock32.dll一样的函数,目标程序将首先装你的dll,在send、recv函数里面你可以得到发送和接受到的数据。
    2、注一个dll到该进程,钩send、recv等winsock api函数。
    3、raw socket,截获通过你的机器出去的数据。
    4、winpcap,主页:winpcap.polito.it,这是一个很著名的网络俘获包,很多例子,很多人用来俘获网络数据,我也用它开发了一个网络数据包分析工具。
    5、spi(service provider interface),winsock2的服务接口,是一个ring3模式的dll,在这里也可以截获数据。
    6、ndis驱动程序,这是最麻烦的一种方式,ring0模式,对于你的需求其实用不上这么麻烦。
      

  6.   

    我想监控的是net send,它调用不调用wsock32.dll呢?我试了试stub dll的方法,好象监控不到。
      

  7.   

    net send 调用的是这个函数
    NET_API_STATUS NetMessageBufferSend(
      LPCWSTR servername,  
      LPCWSTR msgname,     
      LPCWSTR fromname,    
      LPBYTE buf,          
      DWORD buflen         
    );至于监视这个函数,你可以用api钩子
      

  8.   

    不知你只是想监听端口还是想在程序中加入这个功能。
    如果只是想监听端口数据:可以下一个Analyzer可监听WINDOWS下的所有“物理”通信,很好用的,在http://analyzer.polito.it/有,注意Analyzer只是一个外壳,还要安装WinPcap(地址同上),要求高一点就用Ethereal,也是用的WinPcap接口http://www.ethereal.com有下载。但是界面是unix,虽然功能强大却不太习惯。实际上单单用WinPcap里面带的一个console工具就可以满足大部分需要。包括各种IPX,IPv4,IPv6协议,一句话,只要是网卡能收到的(发送的)都能看到,当然,只是在局域网内。
    想在程序中加入这个功能的话,下载WinPcap的原代码慢慢研究吧。据说是用的NDIS的什么特性。