如何从Beacon数据包中获取人类可读的日期/时间格式

时间:2018-02-12 06:01:11

标签: wireless beacon access-point human-readable

我想从IEEE 802.11 [a,b,g,n]无线数据包中获取人类可读的日期/时间格式。

我们有一个名为Aircrack-ng的无线笔测试开源项目。该软件包有一个名为Airodump-ng的工具。

我在Airodump-ng的源代码中找到了一个可以将此时间戳转换为可读格式的函数。

源代码:

https://github.com/aircrack-ng/aircrack-ng/blob/master/src/airodump-ng.c#L3039

https://github.com/aircrack-ng/aircrack-ng/blob/master/src/airodump-ng.c#L3044

#define TSTP_SEC 1000000ULL /* It's a 1 MHz clock, so a million ticks per second! */
#define TSTP_MIN (TSTP_SEC * 60ULL)
#define TSTP_HOUR (TSTP_MIN * 60ULL)
#define TSTP_DAY (TSTP_HOUR

static char *parse_timestamp(unsigned long long timestamp) {
        static char s[15];
        unsigned long long rem;
        unsigned int days, hours, mins, secs;

        days = timestamp / TSTP_DAY;
        rem = timestamp % TSTP_DAY;
        hours = rem / TSTP_HOUR;
        rem %= TSTP_HOUR;
        mins = rem / TSTP_MIN;
        rem %= TSTP_MIN;
        secs = rem / TSTP_SEC;

        snprintf(s, 14, "%3ud %02u:%02u:%02u", days, hours, mins, secs);

        return s; }

在Airodump-ng中,我看到了接入点的人类可读时间:

  • ADSL-ADSL:0d 01:04:08
  • ViroooS:0d 18:13:10
  • Python2:0d 12:50:40
  • G4_3355:0d 00:07:34
  • apple:4d 12:23:28
  • 玛雅:8d 22:44:50

例如:作为接入点的 G4_3355 的正常运行时间约为7分钟。

进行测试,我有一个PCAP文件,您可以使用Wireshark解析它。

下载PCAP文件的链接:https://ufile.io/y0cca

Airodump-ng工具的截图: https://ufile.io/qpv5t

How we can write above function (C codes) in Python !?

the <bsstimestamp>183258624319</bsstimestamp> as input. 

ts = 183258624319

result: a Date/Time  readable format.

note: the format of timestamps in wireshark is not like as above TS. https://www.epochconverter.com/

帮助我将此PCAP文件的时间戳转换为可读格式,如上例所示。

非常感谢。

1 个答案:

答案 0 :(得分:1)

简单示例:

from scapy.all import *

def print_timestamp(ts):
    TSTP_SEC =   1000000
    TSTP_MIN  = TSTP_SEC * 60
    TSTP_HOUR  = TSTP_MIN * 60
    TSTP_DAY  = TSTP_HOUR * 24

    days = ts / TSTP_DAY;
    rem = ts % TSTP_DAY;
    hours = rem / TSTP_HOUR;
    rem %= TSTP_HOUR;
    mins = rem / TSTP_MIN;
    rem %= TSTP_MIN;
    secs = rem / TSTP_SEC;

    print '%3ud %02u:%02u:%02u'% (days, hours, mins, secs)

pkts = rdpcap('timestamp.cap')

for pkt in pkts:
    if pkt.haslayer(Dot11Beacon) or pkt.haslayer(Dot11ProbeResp):
        print_timestamp(pkt.timestamp)