How do you send an Ethernet frame with a corrupt FCS?

后端 未结 4 1847
滥情空心
滥情空心 2020-12-10 05:48

I\'m not sure if this is even possible since this might be handled in hardware, but I need to send some Ethernet frames with errors in them. I\'d like to be able to create r

4条回答
  •  眼角桃花
    2020-12-10 06:08

    The program did not work as intended for me to generate FCS errors.

    The network driver added the correct checksum at the end of the generated frame again. Of course it's quite possible that the solution is working for some cards, but I'm sure not with any from Intel. (It's also working without any ethtool changes for me.)

    With at least an Intel e1000e network card you need a small change to the code above: Add the following line after "s = socket(AF_PACKET, SOCK_RAW)":

    s.setsockopt(SOL_SOCKET,43,1)
    

    This tell the NIC driver to use the "SO_NOFCS" option defined in socket.h and send the frame out without calculating and adding the FCS.

    You may also be interested in the following C-programm, which did show me how to do it: http://markmail.org/thread/eoquixklsjgvvaom

    But be aware that the program will not work on recent kernels without a small change. The SOL_SOCKET seems to have changed the numeric ID from 42 to 43 at some time in the past.

    According to the original author the feature should be available for at least the following drivers: e100, e1000, and e1000e. A quick grep in the kernel sources of 3.16.0 is indicating that ixgbe igb and i40e should also work. If you are not using any of these cards this socket option will probably not be available.

提交回复
热议问题