我在用WinPcap捕获数据包的时候,不知道如何区分数据包是自己发出去的,还是从网口接收到的。我直接捕获的是Ethernet包,里面只有源mac地址和目的mac地址。但是WireShark里面可以显示出,一个包是不是本机发出的。
请问各位高手,在这种情况下如何区分捕获的数据包,究竟是发出的?还是收到的?WireShark是如何知道的呢?

解决方案 »

  1.   

    包的头里面不是有 from 和to 的字节么!
      

  2.   

    特殊的协议,只有MAC地址和帧类型的信息可以使用。
      

  3.   

    比对mac地址呗,你上网搜一下获取本机mac地址的方法,然后比对本机mac和源地址相等还是目的mac地址相等不久知道了是什么方向的数据报了。而且winpcap好像抓包的时候设置成混杂模式的吧。其他无关的数据包了也会收进来,要仔细判断一下的。
      

  4.   

    难道没有对应源地址和目的地址 或MAC地址吗? 
      

  5.   


    void CSquallPacketCap::DealWithPacket(CTime Tm,ULONG Len, BYTE* pBuf)
    {
    //注意看这里!!
    TRACE("\n\n %s, %d \nFrom [%s] To [%s] \n",
    Tm.Format("%H:%M:%S"),Len,
    MacToString(&pBuf[6]),MacToString(&pBuf[0]));}CString CSquallPacketCap::MacToString(BYTE* Mac)
    {
    CString str;
    str.Format("%.2x:%.2x:%.2x:%.2x:%.2x:%.2x",Mac[0],Mac[1],Mac[2],Mac[3],Mac[4],Mac[5]);
    return str;
    }
    你不是知道目标mac地址和源mac地址了么?
    先查一下自己机器的mac地址。
    如果源mac等于本机mac,则是自己发出去的。
    如果目标mac等于本机mac,则是自己收到的。
      

  6.   

    通过查看源MAC地址即可知道是否是本机发出的.
    包头的前6个字节是目的MAC, 紧接着的是源MAC地址.
    但是要注意特殊情况, 比如是某些程序构造的裸数据包, 那就可能区分不了源和目的了.