我用原始套接字写了个程序,并把网卡设为混杂模式,想接收网络上的所有数据,可是出了自己的机器发出和收到的数据,只能接到别的机器和网关通信的,还有别的机器进行广播和组播的数据,而且,奇怪的是,我可以接收到网络上所有的ICMP报文。
请问为什么?
原始套接字是工作在IP层还是链路层?

解决方案 »

  1.   

    你必须是集线器才能接收其它机器的数据,ICMP是广播数据,所以你可以收到,原始套接字工作在IP层。
      

  2.   

    你的机器连接的不是HUB,是交换机等,这样你的网卡就不能收到不属于你的数据,因为交换机和HUB是工作在不同的层。
      

  3.   

    http://www.xfocus.net/articles/200104/147.html
    http://www.xfocus.net/articles/200205/395.html
    http://www.xfocus.net/articles/200204/377.html
      

  4.   

    那交换机和HUB格式工作在哪一层呢?
    交换机和HUB有什么区别?
      

  5.   

    1、从OSI体系结构来看,集线器属于OSI的第一层物理层设备,而交换机属于OSI的第二层数据链路层设备。也就意味着集线器只是对数据的传输起到同步、放大和整形的作用,对数据传输中的短帧、碎片等无法进行有效的处理,不能保证数据传输的完整性和正确性;而交换机不但可以对数据的传输做到同步、放大和整形,而且可以过滤短帧、碎片等。 
      2、从工作方式来看,集线器是一种广播模式,也就是说集线器的某个端口工作的时候,其他所有端口都能够收听到信息,容易产生广播风暴,当网络较大时网络性能会受到很大的影响,那么用什么方法去避免这种现象呢?交换机就能够起到这种作用!当交换机工作的时候,只有发出请求的端口和目的端口之间相互响应而不影响其他端口,因此交换机就能够隔离冲突域和有效的抑制广播风暴的产生。 
    3、从带宽来看,集线器不管有多少个端口,所有端口都是共享一条带宽,在同一时刻只能有二个端口传送数据,其他端口只能等待,同时集线器只能工作在半双工模式下;而对于交换机而言,每个端口都有一条独占的带宽,当二个端口工作时并不影响其他端口的工作,同时交换机不但可以工作在半双工模式下而且可以工作在全双工模式下。
      

  6.   

    你首先确认你的局域网环境是HUB还是交换机,如果是交换机,必须在网关或代理上。如果你想监测IP层以下的包,则必须使用WINPCAP或驱动。
      

  7.   

    ICMP可以是广播数据,也可以不是~
      

  8.   

    可是在交换机网络下,我可与接到其他机器之间传送的ICMP报文,也就是说,为什么交换机会把ICMP报文广播?
      

  9.   

    你确信收到的ICMP报文的目标地址是广播地址吗?是不是组播地址?
      

  10.   

    我收到的ICMP报文目的地址既不是广播,也不是组播。
    我就是我感到奇怪的原因呀。