当前位置: 技术问答>linux和unix
问个linux下raw socket的问题
来源: 互联网 发布时间:2015-12-10
本文导语: 一个很简单的利用raw socket在网络层截包的小程序,在windows下运行正常,现在需要移植到linux下后,发现sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP)这句代码执行后sock的值一定是-1,socket创建失败,后来网上搜了一下,有...
一个很简单的利用raw socket在网络层截包的小程序,在windows下运行正常,现在需要移植到linux下后,发现sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP)这句代码执行后sock的值一定是-1,socket创建失败,后来网上搜了一下,有种说法说linux下不能创建IPPROTO_IP类型的RAW SOCKET,只能使用socket(AF_INET, SOCK_RAW, IPPROTO_TCP)或者socket(AF_INET, SOCK_RAW, IPPROTO_UDP)之类的原始套接字,但这样一来相应的程序就只能截tcp包或者udp包了,与要求不符合了,请教高手有无解决的良策,本人比较菜,先谢谢拉:)
|
An IPPROTO_RAW socket is send only. If you really want to receive all IP packets use a packet(7) socket with the ETH_P_IP protocol. Note that packet sockets don't reassemble IP fragments, unlike raw sockets.
packet(7)就是pf_packet,上面打错了,不是pf_socket
packet(7)就是pf_packet,上面打错了,不是pf_socket
|
socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))