能够通过数据包,辨认出它属于哪个进程、线程、应用程序吗?以及该数据包的应用层协议(HTTP、FTP等)吗?比如想记录一段时间内通过FTP下载的文件和存入本地的路径,有什么可行的实现方法吗?请大家多给些建议,分数不是问题,我找了很多资料,可是一筹莫展,真的希望能听听高手的指教!
 
谢谢!

解决方案 »

  1.   

    没有什么很特殊的方法,去掉TCP头,得到包的内容后,然后根据协议的特征去判断并匹配。
      

  2.   

    没有什么很特殊的方法,去掉TCP头,得到包的内容后,然后根据协议的特征去判断并匹配。
      

  3.   

    请问能匹配到哪一步?能够找出我希望的那些信息吗?似乎,包头里只包括目标和源地址,但入骨真是这样,操作系统又是怎么正确的将TCP包进行解析,作后提供给应用程序的呢?比如用FTP同时下载两个文件时,TCP包难道不是交错到达的吗?为什么最后两个文件不会互相干扰?希望能详细说说,不胜感激!
      

  4.   

    从端口来判断的,TCP/IP就是用端口来区分服务的,如:如果是80端口就是http服务的了,如果某进程发到了一个源端口为80的数据包,那该进程大概就是某浏览器了,再从数据包的目的端口来判断,如果本机的某个进程正在用该端口监听或接收数据,那该进程就可能是一个浏览器了(只是可能)。总之,数据包是用端口来区分服务的,也就是数据包发到某个端口,就发到了正在使用该端口的进程,所以TCP和UDP包中都要有目的和源端口号的。
      

  5.   

    typedef struct _IP_HEADER{
    UCHAR  Ver;
    UCHAR  Service;
    UCHAR  LengthU;
    UCHAR  LengthL;
    USHORT Identification;识别号
    USHORT FragmentOffset;数据侦偏移
    UCHAR  LiveTime;
    UCHAR  Protocol;
    USHORT HeaderCRC;
    ULONG  IP_SA;
    ULONG  IP_DA;
    } IP_HEADER, *PIP_HEADER;typedef struct _TCP_HEADER
    {
    USHORT sport;
    USHORT dport;
    UCHAR   reserved[9];
    } TCP_HEADER, *PTCP_HEADER;通过TCP头中的端口来判别是什么网络应用
    通过识别号与侦偏移来解决交错问题。
      

  6.   

    你可以看看有关sniffer的技术!
    或者看看snort的源码,它有详细的抓包程序。关于如何查询,我记不清了,你用搜索引擎查查吧。
      

  7.   

    简单的方法,HookWinSOCK DLL 或 编写Layered SPI