tcp - 使用 Scapy 发送的 TCP SYN 从未被服务器接收到,Wireshark 在环回接口上也没有注意到
问题描述
我在 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()
and not send()
,因为我们在这里讨论的是第 2 层:
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”)上嗅探数据包。
请注意,调用 toroute_add_loopback()
是必需的,否则show_interfaces()
不会报告“Npcap Loopback Adapter”,这意味着这sendp()
将失败。可以通过调用conf.route.resync ()
after来恢复 Scapy 路由表route_add_loopback()
,但结果是一样的:Wireshark 不会在任一接口上嗅探数据包。
如果有人发现一些在 Windows 7 上运行的 Python 代码成功地在“Npcap Loopback Adapter”上发送了一个简单的 TCP 数据包,他会受到欢迎......
解决方案
环回接口不是“常规”接口;对于 Windows 尤其如此。
您可以通过运行检查 Scapy 用于发送数据包的路由packet.route()
:
如果显示的路由不使用环回接口,您可以尝试运行(这是特定于 windows 的)route_add_loopback()
并重试。
另一种选择是使用srp1()
而不是sr1()
,并将环回接口指定为iface=
参数。
推荐阅读
- docusignapi - Docusign:获取访问令牌
- postgresql - 如何在 docker exec bash 命令中转义引号
- ios - SF Symbols 多彩多姿的图标
- activemq-artemis - 集群 ActiveMQ 中的负载均衡
- view - SwiftUI 如何获取自定义幻灯片转换的视图大小?
- html - 在 grep 之后使用 Sed 将内联替换为 HTML 前缀
- xml - 打字稿事件发射器
- flutter - Flutter 如何正确测试 ui.Image 是否为空或 null?
- r - 重新排序 x 轴 ggplot2 上的值
- c# - 我在游戏中出现了疯狂的延迟,我知道为什么,但我很确定如何解决它