与Scapy一起发送的TCP SYN从未被服务器接收,也没有在环回接口上被Wireshark注意到

与Scapy一起发送的TCP SYN从未被服务器接收,也没有在环回接口上被Wireshark注意到,tcp,scapy,npcap,syn,Tcp,Scapy,Npcap,Syn,我在Windows7(Python3.6、Scapy2.4.0)上对Scapy的基本用法有一个问题。我还在这个系统上运行Npcap 0.99r7和Wireshark 2.6.2。系统只有一个无线网络接口和Npcap环回接口 我设置了这个非常经典的TCP服务器…: import socket host = '127.0.0.1' port = 8089 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((host, port

我在Windows7(Python3.6、Scapy2.4.0)上对Scapy的基本用法有一个问题。我还在这个系统上运行Npcap 0.99r7和Wireshark 2.6.2。系统只有一个无线网络接口和Npcap环回接口

我设置了这个非常经典的TCP服务器…:

import socket

host = '127.0.0.1'
port = 8089
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
s.listen(1)
connection, address = s.accept()
while 1:
    try :
        data = connection.recv(1024)
    except ConnectionAbortedError:
        break
    if data:
        print('Received: %s' % (data.decode ('utf-8')))
    connection.sendall('Data received'.encode())
connection.close()
s.close()
…我设置了一个非常经典的TCP客户端:

import socket

host = '127.0.0.1'
port = 8089
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
s.send('Hello, world!'.encode())
data = s.recv(1024)
print('Received: %s' % (data.decode('utf-8')))
s.close()
两者都很好。Wireshark会在环回接口上报告整个TCP流量

现在,我正在运行服务器,我尝试运行一段代码,该代码将使用Scapy向服务器发送一个SYN:

from scapy.layers.inet import IP
from scapy.layers.inet import TCP
from scapy.sendrecv import *

dstHost='127.0.0.1'
dstPort = 8089
packet = IP(src='127.0.0.1', dst=dstHost)/TCP(dport=dstPort, flags='S')
response=sr1(packet, timeout=10)
response.display()
Python报告:

Begin emission:
..Finished sending 1 packets.
......Traceback (most recent call last):

  File "R:/Documents/Projets/python/hacking/scan.py", line 46, in <module>
    response.display()
AttributeError: 'NoneType' object has no attribute 'display'
Received 8 packets, got 0 answers, remaining 1 packets
不幸的是,Wireshark没有在两个接口(英特尔(R)迅驰(R)高级N 6235和Npcap环回适配器)上嗅探数据包

请注意,需要调用
route\u add\u loopback()
,或者
show\u interfaces()
不会报告“Npcap loopback Adapter”,这意味着
sendp()
将失败。可以在
route\u add\u loopback()
之后调用
conf.route.resync()
来恢复Scapy路由表,但结果是相同的:Wireshark不会嗅探任何接口上的数据包


如果有人发现在Windows 7上运行的Python代码成功地在“Npcap环回适配器”上发送了一个简单的TCP数据包,他将受到欢迎…

环回接口不是“常规”接口;对于Windows来说尤其如此

通过运行:
packet.route()
,您可以检查Scapy发送数据包所使用的路由

如果显示的路由未使用环回界面,您可以尝试运行(这是windows特有的)
route\u add\u loopback()
,然后重试


另一个选项是使用
srp1()
而不是
sr1()
,并将环回接口指定为
iface=
参数。

谢谢。我尝试过,但是如果在创建数据包之前调用route_add_loopback(),Scapy路由表现在包含127.0.0.0的条目(iface是Npcap环回),但是网关是0.0.0.0,而不是127.0.0.1。数据包路由现在是(,'127.0.0.1','0.0.0.0'),因此数据包不会发送到环回,而是发送到Intel iface。你知道为什么127.0.0.0的网关是0.0.0.0而不是127.0.0.1吗?我已经用另一个选项更新了我的答案,你可以试试。好主意,但是我尝试用iface='Npcap Loopback Interface'参数调用srp1(),而不是sr1(),因为这是我调用route\u add\u Loopback()后出现在ifaces列表中的接口的名称。最糟糕的情况是:Wireshark不会在任何接口上嗅探数据包……我必须补充一点,因为srp1()是第2层,我只是在数据包中添加了Ether()头。Wireshark现在嗅探它,但在无线接口上,而不是环回接口上。尝试使用
loopback()/IP…
frame而不是Ether
route_add_loopback()
packet = Loopback()/IP(src='127.0.0.1', dst='127.0.0.1')/TCP(dport=8089, flags='S')
sendp(packet,iface='Npcap Loopback Adapter')