我正在尝试启动从无人机到计算机的视频数据流。无人机通过移动应用程序运行wifi接入点以进行视频和照片控制(飞行控制器使用单独的2.4 GHz信号)。我在计算机上的Android模拟器上运行了该应用程序,然后嗅到了以下流量:
PSH,ACK
数据包,其中包含20个字节的数据,如下所示:无人驾驶飞机到客户数据-示例1:
Data (20 bytes)
Data: 637d00000180ffffd188d5ca3586d5ca00020000
Text: c}
[Length: 20]
无人驾驶飞机到客户数据-示例2:
Data (20 bytes)
Data: 569500000168ffffaaac8c4c01aa8c4c00020000
Text: V\357\277\275
[Length: 20]
无人驾驶飞机到客户数据-示例3:
Data (20 bytes)
Data: 1e9a00000164ffff46bdb26265bbb26200020000
Text: \036\357\277\275
[Length: 20]
ACK
的数字增加20 PSH,ACK
数据包,其中包含12个字节的数据我编写了与Scapy的TCP连接的脚本,并且可以从客户端到服务器(无人机)到达最后一个PSH,ACK数据包。然后,无人机立即发送FIN
数据包。我正在使用netcat监听端口6666,该端口始终是无人机试图将UDP数据包(作为碎片IPv4数据包)发送到的端口。
以下是从脚本化连接捕获的内容:
这是我的Scapy脚本:
from scapy.all import *
#SYN
ip = IP(src="172.16.10.139",dst="172.16.10.1")
SYN = TCP(sport=39921,dport=8888,flags="S",seq=2091127182,options=[('MSS', 1460), ('SAckOK', b''), ('NOP', None), ('WScale', 6)])
SYNACK=sr1(ip/SYN)
#ACK
ACK=TCP(sport=39921,dport=8888,flags="A",seq=SYNACK.ack, ack=SYNACK.seq +1)
PSHACK=sr1(ip/ACK)
#ACK2
ACK2=TCP(sport=39921,dport=8888,flags="A",seq=PSHACK.ack, ack=PSHACK.seq +20)
send(ip/ACK2)
#PSHACK2
PSHACK2=TCP(sport=39921,dport=8888,flags="PA",seq=PSHACK.ack, ack=PSHACK.seq +20)
send(ip/PSHACK2/'\001\357\277\275\357\277\27')
请注意,我最初将值\275
作为字符串的最后四个字符,但是Wireshark随后显示数据长度为13个字节。我省略了最后一个5
,然后Wireshark报告数据长度为12个字节。我不确定数字5
的含义是什么,或者我是否发送正确的12个字节。
这些是我发送的12个字节,如Wireshark所述:
Data (12 bytes)
Data: 01c3afc2bfc2bdc3afc2bf17
Text: \001\357\277\275\357\277\275\357\277\275\357\277\275\357\277\275\357\277\275\357\277\275\357\277\275\357\277\275\357\277\275\027
[Length: 12]
我使用模拟器捕获了多个成功的连接,并且我注意到捕获的数据在以下方面有所不同:
客户端数据到无人机-捕获1
Data (12 bytes)
Data: 0174b21607b6c6fc082a7913
Text: \001t\357\277\275\026\a\357\277\275\357\277\275\357\277\275\b*y\023
[Length: 12]
客户端数据到无人机-捕获2
Data (12 bytes)
Data: 01f8d7142452257d254afd91
Text: \001\357\277\275\357\277\275\024$R%}%J\357\277\275\357\277\275
[Length: 12]
客户端数据到无人机-捕获3
Data (12 bytes)
Data: 0128e514ba003ceabb2821ff
Text: \001(\357\277\275\024\357\277\275
[Expert Info (Warning/Undecoded): Trailing stray characters]
[Trailing stray characters]
[Severity level: Warning]
客户端数据到无人机-捕获4
Data (12 bytes)
Data: 01c0cf16a1c4d009a284a020
Text: \001\357\277\275\357\277\275\026\357\277\275\357\277\275\357\277\275\t\357\277\275\357\277\275\357\277\275
[Length: 12]
我需要了解如何使用Scapy发送相同的12个字节的数据。我相信客户端发送给无人机的PSH,ACK
数据包是魔术数据包,而12字节的数据就是魔术字。
Android应用程序包含一组C ++共享对象,这些对象显然可以处理我尝试模拟的连接。
我应该如何在我的Scapy脚本中添加必要的12个字节的数据,以将分段的IPv4数据包流启动到客户端上的UDP端口?还是看起来Scapy脚本正确无误,以及客户端配置是否存在问题,即目标端口的可用性?