我如何在 pcap 中创建一个 tcp 数据包
How do i create a tcp packet in a pcap
我想创建(不是发送或嗅探)tcp 数据包并将它们放入创建的 pcap 中。
我正在尝试 scapy,但很多文档都是用于发送数据包或嗅探现有网络流量的。我想在 pcap
中使用自定义 headers 和 put/create 创建 tcp 数据包和会话
如果您需要的话,您可以使用 wrpcap
函数将数据包写入 pcap 文件。在这个小脚本中,我制作了三个 SYN TCP
以目标端口 80 为目标并写入 pcap 文件的数据包:
from scapy.all import IP, TCP, wrpcap
for ip in [
'8.8.8.8',
'151.101.65.69',
'104.244.42.129'
]:
p = IP(dst=ip)/TCP(dport=80, flags='S')
wrpcap('packets.pcap', p, append=True)
然后可以使用 wireshark 等打开输出 packets.pcap
文件。
[编辑]
然后您可以制作数据包并模拟 TCP 会话。你只需要
请注意 IP 地址、TCP 端口、标志和序列号。
例如,在该脚本中,我模拟了一个 TCP 连接
1.1.1.1:10000(客户端)和 2.2.2.2:80(服务器)。握手后,
客户端发送单词 GET
,服务器用 DATA
回答。
然后断开连接。
Wireshark 似乎对生成的 pcap 文件很满意。
#!/usr/bin/env python3
from scapy.all import IP, TCP, wrpcap
src = '1.1.1.1' # source IP
dst = '2.2.2.2' # destination IP
sport = 10_000 # source port
dport = 80 # destination port
packets = [
##### TCP 3-way handshake
# 1.1.1.1:10000 --SYN--> 2.2.2.2:80
IP(src=src, dst=dst)/TCP(sport=sport, dport=dport, flags='S'),
# 2.2.2.2:80 --SYN,ACK--> 1.1.1.1:10000
IP(src=dst, dst=src)/TCP(sport=dport, dport=sport, flags='SA'),
# 1.1.1.1:10000 --ACK--> 2.2.2.2:80
IP(src=src, dst=dst)/TCP(sport=sport, dport=dport, flags='A'),
#####
##### data exchange
# 1.1.1.1:10000 --GET--> 2.2.2.2:80
IP(src=src, dst=dst)/TCP(sport=sport, dport=dport, flags='', seq=1)/'GET',
# 2.2.2.2:80 --ACK=4--> 1.1.1.1:10000 (4 = 1 + len('GET'))
IP(src=dst, dst=src)/TCP(sport=dport, dport=sport, flags='A', seq=1, ack=4),
# 2.2.2.2:80 --DATA--> 1.1.1.1:10000
IP(src=dst, dst=src)/TCP(sport=dport, dport=sport, flags='', seq=1)/'DATA',
# 1.1.1.1:10000 --ACK=5--> 2.2.2.2:80 (5 = 1 + len('DATA'))
IP(src=src, dst=dst)/TCP(sport=sport, dport=dport, flags='A', ack=5),
#####
##### TCP disconnection
# 1.1.1.1:10000 --FIN--> 2.2.2.2:80
IP(src=src, dst=dst)/TCP(sport=sport, dport=dport, flags='F', seq=4),
# 2.2.2.2:80 --FIN,ACK--> 1.1.1.1:10000
IP(src=dst, dst=src)/TCP(sport=dport, dport=sport, flags='FA', seq=5),
# 1.1.1.1:10000 --ACK--> 2.2.2.2:80
IP(src=src, dst=dst)/TCP(sport=sport, dport=dport, flags='A')
#####
]
wrpcap('packets.pcap', packets)
我想创建(不是发送或嗅探)tcp 数据包并将它们放入创建的 pcap 中。
我正在尝试 scapy,但很多文档都是用于发送数据包或嗅探现有网络流量的。我想在 pcap
中使用自定义 headers 和 put/create 创建 tcp 数据包和会话如果您需要的话,您可以使用 wrpcap
函数将数据包写入 pcap 文件。在这个小脚本中,我制作了三个 SYN TCP
以目标端口 80 为目标并写入 pcap 文件的数据包:
from scapy.all import IP, TCP, wrpcap
for ip in [
'8.8.8.8',
'151.101.65.69',
'104.244.42.129'
]:
p = IP(dst=ip)/TCP(dport=80, flags='S')
wrpcap('packets.pcap', p, append=True)
然后可以使用 wireshark 等打开输出 packets.pcap
文件。
[编辑] 然后您可以制作数据包并模拟 TCP 会话。你只需要 请注意 IP 地址、TCP 端口、标志和序列号。
例如,在该脚本中,我模拟了一个 TCP 连接
1.1.1.1:10000(客户端)和 2.2.2.2:80(服务器)。握手后,
客户端发送单词 GET
,服务器用 DATA
回答。
然后断开连接。
Wireshark 似乎对生成的 pcap 文件很满意。
#!/usr/bin/env python3
from scapy.all import IP, TCP, wrpcap
src = '1.1.1.1' # source IP
dst = '2.2.2.2' # destination IP
sport = 10_000 # source port
dport = 80 # destination port
packets = [
##### TCP 3-way handshake
# 1.1.1.1:10000 --SYN--> 2.2.2.2:80
IP(src=src, dst=dst)/TCP(sport=sport, dport=dport, flags='S'),
# 2.2.2.2:80 --SYN,ACK--> 1.1.1.1:10000
IP(src=dst, dst=src)/TCP(sport=dport, dport=sport, flags='SA'),
# 1.1.1.1:10000 --ACK--> 2.2.2.2:80
IP(src=src, dst=dst)/TCP(sport=sport, dport=dport, flags='A'),
#####
##### data exchange
# 1.1.1.1:10000 --GET--> 2.2.2.2:80
IP(src=src, dst=dst)/TCP(sport=sport, dport=dport, flags='', seq=1)/'GET',
# 2.2.2.2:80 --ACK=4--> 1.1.1.1:10000 (4 = 1 + len('GET'))
IP(src=dst, dst=src)/TCP(sport=dport, dport=sport, flags='A', seq=1, ack=4),
# 2.2.2.2:80 --DATA--> 1.1.1.1:10000
IP(src=dst, dst=src)/TCP(sport=dport, dport=sport, flags='', seq=1)/'DATA',
# 1.1.1.1:10000 --ACK=5--> 2.2.2.2:80 (5 = 1 + len('DATA'))
IP(src=src, dst=dst)/TCP(sport=sport, dport=dport, flags='A', ack=5),
#####
##### TCP disconnection
# 1.1.1.1:10000 --FIN--> 2.2.2.2:80
IP(src=src, dst=dst)/TCP(sport=sport, dport=dport, flags='F', seq=4),
# 2.2.2.2:80 --FIN,ACK--> 1.1.1.1:10000
IP(src=dst, dst=src)/TCP(sport=dport, dport=sport, flags='FA', seq=5),
# 1.1.1.1:10000 --ACK--> 2.2.2.2:80
IP(src=src, dst=dst)/TCP(sport=sport, dport=dport, flags='A')
#####
]
wrpcap('packets.pcap', packets)