dpkt を使用して NTP フィールドを出力しようとしています。tcpdump から取得したような出力を取得できなかったことを除けば、うまく機能します。たとえば、添付のコードでは、originate_time を人間が読める形式で出力できませんでした。binascii で関数を試しましたが、うまくいきませんでした。
私は dpkt の初心者であり、ポインタは素晴らしいでしょう。
import dpkt
import socket
def processPcap(iFile):
f = open(iFile)
pcap = dpkt.pcap.Reader(f)
for ts, buf in pcap:
eth = dpkt.ethernet.Ethernet(buf)
ip = eth.data
source = socket.inet_ntoa(ip.src)
destination = socket.inet_ntoa(ip.dst)
udp = ip.data
if ip.p==dpkt.ip.IP_PROTO_UDP:
if udp.dport == 123:
ntp = dpkt.ntp.NTP(udp.data)
print (("Timestamp:%s, Source:%s, Destination:%s, SPort:%s, DPort:%s") % (ts, source, destination, udp.sport, udp.dport))
print ntp.flags
print ntp.delay
print ntp.id
print ntp.dispersion
print ntp.update_time
print ntp.originate_time
f.close()
if __name__ == "__main__":
INPUT = "<inputFile>"
processPcap(INPUT)