我正在努力通过为MQTT网络使用替罪羊来创建一个合法的客户端。我实现了3次握手和与MQTT代理的可能连接(代理完全正常工作,我使用另一个客户端对其进行了测试)。下面是我的代码:
from scapy.contrib.mqtt import *
from scapy.all import send, sendp, IP, TCP, Ether, sr, sr1
seq = 12345
src='192.168.1.90'
dst='192.168.1.91'
sport = 1040
dport=1883
pkt=IP(src=src, dst=dst)
SYN=pkt/TCP(sport=sport, dport=dport, flags="S")
SYNACK=sr1(SYN)
ACK=pkt/TCP(sport=sport, dport=dport, flags="A", seq=SYNACK.ack, ack=SYNACK.seq + 1)
send(ACK)
payload_packet = TCP(sport=sport, dport=dport, flags='A', seq=ACK.ack, ack=ACK.seq + 1)
mqtt_pkt = MQTTConnect(clientId='my_client_id')
reply, error = sr(pkt/payload_packet/mqtt_pkt, multi=1, timeout=1)
for r in reply:
r[0].show2()
r[1].show2()
此代码无法将客户端连接到MQTT代理,因为软件在ACK数据包之前发送RST。请看下面的图片。
Wireshark流:
你能帮帮我吗?提前感谢
发布于 2020-07-17 19:20:03
当您自己的机器从您的TCP协议列表中看到syn时,它正在发送TCP重置。
你需要做的是通知你的内核你想要使用一个特定的端口。在linux中,它是通过以下方式完成的:
sudo iptables -A OUTPUT -p tcp --tcp-flags RST RST -j DROP
# to see the result:
sudo iptables -L
参考:https://www.fir3net.com/Programming/Python/how-to-build-a-tcp-connection-in-scapy.html
https://stackoverflow.com/questions/62957561
复制相似问题