递增PCAP时间戳值

2 投票
2 回答
1345 浏览
提问于 2025-04-17 17:27

Scapy这个工具可以让你在每个数据包上修改时间戳,所以我在想,怎么才能最好地通过指定一个起始值来修改多个数据包的时间戳。我已经能修改数据包了,但还没成功让微秒的值逐渐增加。

比如,我想把一个PCAP文件中的数据包时间戳从:

1360806997.231777 IP 192.168.1.100.50496 > 192.168.1.200.http: S 4211078664:4211078664(0) win 14600 <mss 1460,sackOK,timestamp 199086437 0,nop,wscale 3>
1360806997.231808 IP 192.168.1.200.http > 192.168.1.100.50496: S 256066681:256066681(0) ack 4211078665 win 14480 <mss 1460,sackOK,timestamp 199086195 199086437,nop,wscale 3>
1360806997.232034 IP 192.168.1.100.50496 > 192.168.1.200.http: . ack 1 win 1825 <nop,nop,timestamp 199086437 199086195>
1360806997.232043 IP 192.168.1.100.50496 > 192.168.1.200.http: P 1:19(18) ack 1 win 1825 <nop,nop,timestamp 199086437 199086195>
1360806997.232063 IP 192.168.1.200.http > 192.168.1.100.50496: . ack 19 win 1810 <nop,nop,timestamp 199086195 199086437>

修改成:

1234567890.000000 IP 192.168.1.100.50496 > 192.168.1.200.http: S 4211078664:4211078664(0) win 14600 <mss 1460,sackOK,timestamp 199086437 0,nop,wscale 3>
1234567890.000001 IP 192.168.1.200.http > 192.168.1.100.50496: S 256066681:256066681(0) ack 4211078665 win 14480 <mss 1460,sackOK,timestamp 199086195 199086437,nop,wscale 3>
1234567890.000002 IP 192.168.1.100.50496 > 192.168.1.200.http: . ack 1 win 1825 <nop,nop,timestamp 199086437 199086195>
1234567890.000003 IP 192.168.1.100.50496 > 192.168.1.200.http: P 1:19(18) ack 1 win 1825 <nop,nop,timestamp 199086437 199086195>
1234567890.000004 IP 192.168.1.200.http > 192.168.1.100.50496: . ack 19 win 1810 <nop,nop,timestamp 199086195 199086437>

2 个回答

2

我在网上找了很多地方,但还是没找到解决办法。如果你想保持数据包之间的差异,可以使用下面的代码,这段代码是对之前代码的修改。

def process_packets():
   pkts = rdpcap('file.pcap')
   cooked=[]
   timestamp = 1234567890.000000
   i = 0
   for p in pkts:
      i += 1
      if i == 1:
         delta = p.time
         p.time = timestamp
      else:
         delta = p.time - delta
         timestamp += delta
         p.time = timestamp
      pmod=p
      cooked.append(pmod)
   wrpcap("dump.pcap", cooked)
2

这个方法看起来可以用:

def process_packets():
    pkts = rdpcap(infile)
    cooked=[]
    timestamp = 1234567890.000000
    for p in pkts:
        p.time = timestamp
        timestamp += 0.000001
        pmod=p
        cooked.append(pmod)
    wrpcap("dump.pcap", cooked)

这段代码会为每个数据包写入一个新的时间值,并将其保存到一个新的PCAP文件中,同时指定秒数并增加微秒的值。如果有更好的方法,请告诉我。

撰写回答