这是代码,只能在 linux 下运行,因为 osx 不支持 PF_PACKET ,只能用 AF_INET,记得以前用 AF_INET 发过原生数据,后悔当时没有记录代码。
求问在 osx 下如何发送原生数据包!万分感谢!!
import socket
rawSocket=socket.socket(socket.PF_PACKET,socket.SOCK_RAW,socket.htons(0x0800))
rawSocket.bind(("eth0",socket.htons(0x0800)))
packet='\x01\x0c\x29\x29\x4d\x89\x00\x50\x56\xc0\x00\x08\x08\x00\x45\x00\x00\x54\xcb\xab\x40\x00\x40\x01\x0b\x2b\xcc\xa8\x71\x01\xc0\xa8\x71\x80\x00\x00\x08\xa6\x0a\xb3\x00\x04\x41\x51\xf9\x55\xbc\xf8\x0a\x00\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37'
rawSocket.send(packet)
1
TheCure 2015-09-23 01:45:00 +08:00
OS X 的 raw socket 有问题,我以前在写一些 SYN 扫描的脚本时候遇到过
FreeBSD takes another approach. It *never* passes TCP or UDP packets to raw sockets. 不确定是否能解决你的问题 |