`sr()` 和 `sniff()` 之间的区别 scapy

difference between `sr()` and `sniff()` scapy

我想知道sr()sniff()的区别 我会清理自己: 当我用 sr() 发送数据包然后打印答案时,它只给我一个数据包:

Received 1 packets, got 1 answers, remaining 0 packets
[(<IP  frag=0 ttl=64 proto=tcp dst=216.58.210.4 |<TCP  sport=37945 dport=http seq=1 ack=1477254816 flags=A |<Raw  load='GET /index.html HTTP/1.0 \n\n' |>>>, <IP  version=4L ihl=5L tos=0x0 len=40 id=1338 flags= frag=0L ttl=128 proto=tcp chksum=0xe12d src=216.58.210.4 dst=192.168.233.128 options=[] |<TCP  sport=http dport=37945 seq=1477254816 ack=28 dataofs=5L reserved=0L flags=A window=64240 chksum=0x5528 urgptr=0 |<Padding  load='\x00\x00\x00\x00\x00\x00' |>>>)]

但是当我用 sniff 做同样的事情时,我得到了更多的数据包,其中一个是带有我问的答案的数据包:

<Ether  dst=00:0c:29:bb:8e:79 src=00:50:56:e9:b8:b1 type=0x800 |<IP  version=4L ihl=5L tos=0x0 len=537 id=1339 flags= frag=0L ttl=128 proto=tcp chksum=0xdf3b src=216.58.210.4 dst=192.168.233.128 options=[] |<TCP  sport=http dport=37945 seq=1477254816 ack=28 dataofs=5L reserved=0L flags=PA window=64240 chksum=0x98df urgptr=0 options=[] |<Raw  load='HTTP/1.0 302 Found\r\nCache-Control: private\r\nContent-Type: text/html; charset=UTF-8\r\nLocation: http://www.google.co.il/index.html?gfe_rd=cr&ei=_geSV8u1C6Xb8AeaxJCoDQ\r\nContent-Length: 271\r\nDate: Fri, 22 Jul 2016 11:48:14 GMT\r\n\r\n<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">\n<TITLE>302 Moved</TITLE></HEAD><BODY>\n<H1>302 Moved</H1>\nThe document has moved\n<A HREF="http://www.google.co.il/index.html?gfe_rd=cr&amp;ei=_geSV8u1C6Xb8AeaxJCoDQ">here</A>.\r\n</BODY></HTML>\r\n' |>>>>

如果你会看到 - 第二个数据包有我要求的 html 代码(这是嗅探它。)但首先没有这个。

sr()是发送和接收数据包。该函数发送特定的数据包,然后仅查找对这些数据包的响应

sniff() 充当嗅探器并读取以太网线路上的所有流量,即使它不是指向您的 IP 地址或您用于发送原始数据包的特定套接字。这允许您查看网络上的其他流量

您可以在 scapy bash 中使用 lsc() 来检查所有必需的命令及其用法。

sr : 在第 3 层发送和接收数据包

sr1 : 在第 3 层发送数据包并且 return 仅第一个答案

srp : 在第 2 层发送和接收数据包

srp1 : 在第 2 层发送和接收数据包并且 return 只有第一个答案

srloop : 在第3层循环发送一个数据包,每次打印答案

srploop : 在第2层循环发送一个数据包,每次打印答案

嗅探:嗅探数据包

发送:在第 3 层发送数据包

sendp : 在第 2 层发送数据包

你可以使用sniff(iface ="your interface", filter = "dst aa:bb:cc:dd:ee") 来获取你想要的数据包。 嗅探函数有很多参数来筛选数据包。