首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在MQTT上使用Scapy创建客户端

在MQTT上使用Scapy创建客户端
EN

Stack Overflow用户
提问于 2020-07-17 15:53:45
回答 1查看 362关注 0票数 0

我正在努力通过为MQTT网络使用替罪羊来创建一个合法的客户端。我实现了3次握手和与MQTT代理的可能连接(代理完全正常工作,我使用另一个客户端对其进行了测试)。下面是我的代码:

代码语言:javascript
运行
AI代码解释
复制
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流:

你能帮帮我吗?提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-17 19:20:03

当您自己的机器从您的TCP协议列表中看到syn时,它正在发送TCP重置。

你需要做的是通知你的内核你想要使用一个特定的端口。在linux中,它是通过以下方式完成的:

代码语言:javascript
运行
AI代码解释
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62957561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文