用Scapy合成数据包

时间:2019-03-05 09:44:41

标签: dataset scapy packet netflow

今天,我收到了3亿个netflow记录的csv条目csv文件,我的目标是通过任何必要的方法将netflow数据转换为合成数据包。经过一些研究,我认为Scapy将是此过程不可思议的工具。我一直在摆弄一些命令,并试图创建描述该netflow数据的准确数据包,但我一直在努力,并且非常感谢以前涉猎Scapy的人的帮助。

以下是我的数据集中的示例条目

1526284499.233,1526284795.166,157.239.11.35,41.75.41.198,443,55915,6,1,24,62,6537,1419,1441,32934,65535,

以下是每个逗号分隔的值

开始时间戳记(Epoch格式):1526284499.233
结束时间戳记(Epoch格式):1526284795.166
来源IP:157.239.11.35
目标IP:41.75.41.198
IP标头协议编号:443(HTTPS)
源端口号:55915
目标端口号:6(TCP)
IP标头中的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协议标头是443,表示HTTPS,但是目标端口是6,表示TCP。因此,我不确定是否应该包含TCP,或者不确定是否包含原始IP属性。此外,我不确定Raw()是否是包含每个数据包大小的正确方法,更不用说我是否以适当的方式定义了大小。

请让我知道我哪里出了问题,或者我实际上是为这个特定条目奇迹般地创建了一个完美的合成数据包。非常感谢!

1 个答案:

答案 0 :(得分:1)

我认为这些列可能是错误的。 HTTPS通常是TCP端口443,因此协议号应为6(TCP),端口之一应为443。我的猜测是443是源端口,因为源IP属于Facebook,因此将55915用作目的地港口。因此,我认为其中的列:源IP,目标IP,源端口,目标端口,协议。