用 Scapy 合成数据包
Synthesizing Packets with Scapy
今天,我收到了一个 3 亿条 netflow 记录的 csv 文件,我的 objective 是通过任何必要的方式将 netflow 数据转换为合成数据包。经过一些研究,我认为 Scapy 将是这个过程的一个不可思议的工具。我一直在摆弄一些命令并试图创建准确的数据包来描述该网络流数据,但我正在努力并且非常感谢以前涉足过 Scapy 的人的帮助。
这是我的数据集中的示例条目:
1526284499.233,1526284795.166,157.239.11.35,41.75.41.198,443,55915,6,1,24,62,6537,1419,1441,32934,65535,
下面是每个逗号分隔值代表什么:
开始时间戳(纪元格式):1526284499.233
结束时间戳(纪元格式):1526284795.166
源IP:157.239.11.35
目标 IP:41.75.41.198
IP Header 协议编号:443 (HTTPS)
源端口号:55915
目标端口号:6 (TCP)
IP Header 中的 TOS 值:1 (FIN)
TCP 标志:24(ACK 和 PSH)
包数:62
字节数:6537
路由器入口端口:1419
路由器出口端口:1441
来源自治系统:32934 (Facebook)
目标自治系统:65535
我当前对该条目的 Scapy 表示:
>>> size = bytes(6537)
>>> packet = IP(src="157.240.11.35", dst="41.75.41.200", chksum=24, tos=1, proto=443) / TCP(sport=55915, dport=6, flags=24) / Raw(size)
packet.show():
###[ IP ]###
version= 4
ihl= None
tos= 0x1
len= None
id= 1
flags=
frag= 0
ttl= 64
proto= 443
chksum= 0x18
src= 157.240.11.35
dst= 41.75.41.200
\options\
###[ TCP ]###
sport= 55915
dport= 6
seq= 0
ack= 0
dataofs= None
reserved= 0
flags= PA
window= 8192
chksum= None
urgptr= 0
options= []
###[ Raw ]###
load= '6537'
我的困惑:
坦率地说,我不确定这是否正确。我感到困惑的地方是 IP 协议 Header 是 443,表示 HTTPS,但目标端口是 6,表示 TCP。因此,我不确定是否应该包括 TCP,或者包括 proto IP 属性是否是无偿的。此外,我不确定 Raw() 是否是包含每个数据包大小的正确方法,更不用说我是否以正确的方式定义大小了。
请告诉我哪里出了问题,或者我是否真的奇迹般地为这个特定条目创建了一个完美的合成数据包。非常感谢!
我认为这些列可能有误。 HTTPS 是 TCP 端口 443(通常),因此协议号应为 6(TCP),其中一个端口应为 443。我的猜测是 443 是源端口,因为源 IP 属于 Facebook,使 55915 成为目标港口。所以,我认为那里的列是:源 IP、目标 IP、源端口、目标端口、协议。
今天,我收到了一个 3 亿条 netflow 记录的 csv 文件,我的 objective 是通过任何必要的方式将 netflow 数据转换为合成数据包。经过一些研究,我认为 Scapy 将是这个过程的一个不可思议的工具。我一直在摆弄一些命令并试图创建准确的数据包来描述该网络流数据,但我正在努力并且非常感谢以前涉足过 Scapy 的人的帮助。
这是我的数据集中的示例条目:
1526284499.233,1526284795.166,157.239.11.35,41.75.41.198,443,55915,6,1,24,62,6537,1419,1441,32934,65535,
下面是每个逗号分隔值代表什么:
开始时间戳(纪元格式):1526284499.233
结束时间戳(纪元格式):1526284795.166
源IP:157.239.11.35
目标 IP:41.75.41.198
IP Header 协议编号:443 (HTTPS)
源端口号:55915
目标端口号:6 (TCP)
IP Header 中的 TOS 值:1 (FIN)
TCP 标志:24(ACK 和 PSH)
包数:62
字节数:6537
路由器入口端口:1419
路由器出口端口:1441
来源自治系统:32934 (Facebook)
目标自治系统:65535
我当前对该条目的 Scapy 表示:
>>> size = bytes(6537)
>>> packet = IP(src="157.240.11.35", dst="41.75.41.200", chksum=24, tos=1, proto=443) / TCP(sport=55915, dport=6, flags=24) / Raw(size)
packet.show():
###[ IP ]###
version= 4
ihl= None
tos= 0x1
len= None
id= 1
flags=
frag= 0
ttl= 64
proto= 443
chksum= 0x18
src= 157.240.11.35
dst= 41.75.41.200
\options\
###[ TCP ]###
sport= 55915
dport= 6
seq= 0
ack= 0
dataofs= None
reserved= 0
flags= PA
window= 8192
chksum= None
urgptr= 0
options= []
###[ Raw ]###
load= '6537'
我的困惑:
坦率地说,我不确定这是否正确。我感到困惑的地方是 IP 协议 Header 是 443,表示 HTTPS,但目标端口是 6,表示 TCP。因此,我不确定是否应该包括 TCP,或者包括 proto IP 属性是否是无偿的。此外,我不确定 Raw() 是否是包含每个数据包大小的正确方法,更不用说我是否以正确的方式定义大小了。
请告诉我哪里出了问题,或者我是否真的奇迹般地为这个特定条目创建了一个完美的合成数据包。非常感谢!
我认为这些列可能有误。 HTTPS 是 TCP 端口 443(通常),因此协议号应为 6(TCP),其中一个端口应为 443。我的猜测是 443 是源端口,因为源 IP 属于 Facebook,使 55915 成为目标港口。所以,我认为那里的列是:源 IP、目标 IP、源端口、目标端口、协议。