2017-09-18 62 views
0

是否有任何方法可以测量通过scapy发送的传出数据包的时间戳?如何在规范化的价值中呈现这些时间戳,例如wireshark中的时间戳。传出数据包的scapy时间戳测量

我可以通过

packet=IP(src="192.168.0.254", dst="192.168.0.2")/TCP(sport=35021, dport=35021) 
pkt=sniff(filter="host 192.168.0.254") 

发送数据包的一个简单的流虽然我从另一个终端嗅探,

pkt=sniff(filter="host 192.168.0.254") 
for p in pkt: 
    print p[TCP].time 

给了我下面的时间值

1505733059.335 
1505733059.336 
1505733059.336 
1505733059.336 
1505733059.337 
1505733059.337 
1505733059.338 
1505733059.338 
1505733059.338 
1505733059.339 

至于我可以说这些是数据包发送时的值,对吧?如何将这些值更改为规范化的值,如wireshark中?

+1

这是一个非常宽泛和普遍的问题,你说的方式。你有没有搜索任何教程?你有没有编写任何代码?请展示一些努力。 –

+0

添加说明和代码。我希望现在你可以有完整的想法。如果还有其他问题需要回答这个问题,那就让我知道。 –

回答

0

sniffed packed的time属性实际上表示数据包被接收的时间,而不是它发送的时间。实际上,即使是时间Wireshark与嗅探包关联的时间就是它收到的时间,如detailed in the official wiki

有没有直接的方式来提取嗅探数据包发送的时间。可以尝试测量网络延迟并根据此延迟发送时间,但此方法的准确性值得怀疑。另一种选择是在发送机器上提取发送时间,并以某种方式将其传送给嗅探机,或者在带内使用可控的ad hoc协议,否则带外,但两种方法看起来相当不雅,并且是只有当发送机器可以被操纵时才可行。


存储在time属性的值是相当于the time.time() function返回值,这是以秒计的时间,因为epoch,即,点的时间开始,其中并且是依赖于平台的。

通过将这些值传递给the time.gmtime() function或将它们传递给the time.localtime() function,可以将它们转换为UTC中更通用的时间格式(即年,月,日,小时等)。在这两种情况下,都会返回struct_time object,从中可以将日历日期的组件作为属性访问。将返回的struct_time对象传递给the time.asctime() function将其转换为人类可读的字符串格式,但通过the time.strftime() function可以更好地控制人类可读输出。

Python 3.4.3 (default, Nov 17 2016, 01:08:31) 
[GCC 4.8.4] on linux 
Type "help", "copyright", "credits" or "license" for more information. 

>>> import time 
>>> 
>>> timestamp = time.time() 
>>> print(timestamp) 
1505806452.8678658 
>>> 
>>> local_time = time.localtime(timestamp) 
>>> print(local_time) 
time.struct_time(tm_year=2017, tm_mon=9, tm_mday=19, tm_hour=10, tm_min=34, tm_sec=12, tm_wday=1, tm_yday=262, tm_isdst=1) 
>>> 
>>> human_time = time.asctime(local_time) 
>>> print(human_time) 
Tue Sep 19 10:34:12 2017 
>>> 
>>> my_human_time = time.strftime('%A, %d/%m/%y, %I:%M:%S %p', local_time) 
>>> print(my_human_time) 
Tuesday, 19/09/17, 10:34:12 AM 
>>>