大家好,这是我第一次使用 Python 作为编程语言进行 PCAP 编程,这是针对大学的一项任务,除了一个小细节外,我几乎已经获得了完成任务所需的一切。
我只需要获取与 IP 地址关联的源端口号和目标端口号(例如 HTTP 端口 80)的输出。
我很高兴答案是指向正确方向的指针,可以帮助我自己解决问题。否则,如果它更容易被回答,我想要一个关于使用什么以及它如何解决问题的基本解释,这样当我在我的学习和研究中进行更多的未来 PCAP 编程时,我可以更好地理解它。
这是在运行 FreeBSD 10.3 的 Unix 系统上使用的
我尝试过使用 dpkt.tcp、dpkt.udp、dpkt.ip 库以及一些套接字库来查看是否可以达到我想要的结果,但运气不佳。老实说,我不确定我需要使用什么。
编辑:我确实尝试过使用 tcp.sport 和 tcp.dport,但仍然没有运气。
主要关注领域是我添加评论的地方。
import datetime
import time
import sys
import dpkt
import socket
def printPcap(pcap):
for (ts,buf) in pcap:
try:
eth = dpkt.ethernet.Ethernet(buf)
if eth.type == dpkt.ethernet.ETH_TYPE_IP:
ip = eth.data
ipsrc = socket.inet_ntoa(ip.src)
ipdst = socket.inet_ntoa(ip.dst)
srcport = ??? ###Stuck here for source port
dstport = ??? ###Stuck here for destination port
if ip.p == dpkt.ip.IP_PROTO_TCP:
TCP = ip.data
iptype = 'tcp'
elif ip.p == dpkt.ip.IP_PROTO_UDP:
UDP = ip.data
iptype = 'udp'
len = str(ip.len)
ttl = str(ip.ttl)
###My current output
print '[' +str(datetime.datetime.utcfromtimestamp(ts))+ '] - ' \
+ipsrc+ ':' +srcport+ ' -> ' +ipdst+ ':' +dstport+ \
' ('+iptype+', len='+len+', ttl='+ttl+')'
except:
pass
样本预期输出:
[2018-08-16 02:48:10.238506] - 172.16.11.2:61016 -> 172.16.10.2:80 (tcp, len=52, ttl=63)