scapy的发送包函数
scapy中,将Ether()看作是第二层,IP()看作是第三层
- send()是发送第三层的包,也就是IP层,会自动处理路由和第二层
- sendp()是发送第二层的包,需要自己选择正确的接口和正确的链路层协议 sendp(Ether()/IP(dst=“1.2.3.4”,ttl=(1,4)), iface=“eth1”)
- sr() 函数用于发送数据包和接收答案。该函数返回几个数据包和答案,以及未应答的数据包。
- sr1() 是一个变体,它只返回一个响应发送的数据包(或数据包集)的数据包。数据包必须是第 3 层数据包(IP、ARP 等)
- srp() 对第 2 层数据包(以太网、802.3 等)执行相同的操作。如果没有响应,则在达到超时时将分配一个 None 值。
send函数和sendp是不接收返回包的,如果想要得到返回包,可以使用sr或sr1
构造带数据的TCP数据包
#想要传输的1440字节的数据
data = b'\x00\x00\xa6\x89\xe5\x91f\xed\xbb\xe1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\t\x00H\x006\n\x00\x00p\x00\x00\x00\x00\x00\x00\x00\xfb\xa3h\xab"\x9e\xd7\x01\xa4s\xbd\xf8+\x9e\xd7\x01\xfb\xa3h\xab"\x9e\xd7\x01\xfb\xa3h\xab"\x9e\xd7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00F\x00\x00\x00\x00\x00\x00\x00.\x00\x00\x00\x00\x00\x00\x00p\x00\x00\x00\x00\x00\x00\x00y|\x8f\x0c!\x9e\xd7\x01\xaf\xcf\xe2\xf4+\x9e\xd7\x01y|\x8f\x0c!\x9e\xd7\x01y|\x8f\x0c!\x9e\xd7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x04\x00\x00\x00:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa3