Scapy发送的TCP SYN永远不会被服务器接收,也不会在环回接口上被Wireshark注意到

时间:2018-07-29 10:06:37

标签: tcp scapy syn

我对Windows 7(Python 3.6,Scapy 2.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在环回界面上看不到任何内容。有人可以提示吗?

更新1

如建议的那样,我尝试使用sendp()而不是send()来编写更明确的代码,因为我们在这里讨论第二层:

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')

不幸的是,Wireshark不会在两个接口(“ Intel(R)Centrino(R)Advanced-N 6235”和“ Npcap Loopback Adapter”)上嗅探数据包。

请注意,必须调用route_add_loopback(),否则show_interfaces()将不会报告'Npcap Loopback Adapter',这意味着sendp()将失败。可以通过在conf.route.resync ()之后调用route_add_loopback()来恢复Scapy路由表,但是结果是相同的:Wireshark不会在任何一个接口上嗅探数据包。

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

1 个答案:

答案 0 :(得分:1)

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

您可以通过运行const obj = { a: 123, b: "234234", c: 09, }; const arr = []; for (key in obj) { if (typeof obj[key] !== "string") { arr.push(key); } } console.log(arr);来检查Scapy发送数据包所使用的路由。

如果显示的路由未使用环回接口,则可以尝试运行(特定于Windows)packet.route(),然后重试。

另一种选择是使用route_add_loopback()代替srp1(),并将回送接口指定为sr1()参数。