socket编程

坑挺多的,特别是用原生套接字

C、Python、Go等语言都有支持原生socket编程的方法

注意点

原生socket发包

程序使用raw_socket模式进行ip包的发送,ip包的payload可以自定义。

linux环境下请以root权限运行,windows环境下请以管理员权限运行,执行send_packet.py进行发包

执行发包程序时,发包对应的网卡需配置ip地址,src_ip设置为此ip地址, 如果源地址与发包网卡IP不一致时,网卡可能会丢包, 需要网卡设置混杂模式

若dst_ip设置为不存在的ip,发包网卡并不会发送此包,而是转为发送arp包请求dst_ip所在的物理地址(毕竟不知道该往哪儿发)

ETH_P_IP, ETH_P_ALL, ETH_P_ARP的区别

ETH_P_IP 0x0800, ETH_P_ALL 0x0003, ETH_P_ARP 0x0806

具体参考下面: https://docs.huihoo.com/doxygen/linux/kernel/3.7/uapi_2linux_2if__ether_8h.html