--- old/p0f2.py 2007-06-12 14:11:16.000000000 -0500 +++ bin/p0f2.py 2007-06-12 14:10:56.000000000 -0500 @@ -434,25 +434,25 @@ return match class P0f(object): - def __init__(self, synconf='p0f.fp', synackconf='p0fa.fp', - rstconf='p0fr.fp', match=True, rewrite=False): + def __init__(self, synconf='share/p0f.fp', synackconf='share/p0fa.fp', + rstconf='share/p0fr.fp', match=True, rewrite=False): self.matchdb = {} self.rewritedb = {} if synconf: - bh = load_config(dsniff.path_open(synconf)) + bh = load_config(open(synconf)) if match: self.matchdb[dpkt.tcp.TH_SYN] = bh if rewrite: self.rewritedb[dpkt.tcp.TH_SYN] = self._match_to_rewrite(bh) if synackconf: - bh = load_config(dsniff.path_open(synackconf)) + bh = load_config(open(synackconf)) if match: self.matchdb[dpkt.tcp.TH_SYN|dpkt.tcp.TH_ACK] = bh if rewrite: bh = self._match_to_rewrite(bh) self.rewritedb[dpkt.tcp.TH_SYN|dpkt.tcp.TH_ACK] = bh if rstconf: - bh = load_config(dsniff.path_open(rstconf)) + bh = load_config(open(rstconf)) if match: self.matchdb[dpkt.tcp.TH_RST] = bh self.matchdb[dpkt.tcp.TH_RST|dpkt.tcp.TH_ACK] = bh @@ -528,14 +528,19 @@ import dnet, dsniff -class P0f2(dsniff.IPReader): - pcap_filter = '(tcp[13] & 0x%x != 0)' % (dpkt.tcp.TH_SYN|dpkt.tcp.TH_RST) +class P0f2(dsniff.Handler): + name = 'p0f2' def setup(self): self.p0f = P0f() self.ipcache = { dpkt.tcp.TH_SYN:{}, dpkt.tcp.TH_RST:{} } + self.subscribe('pcap', '(tcp[13] & 0x%x != 0)' % (dpkt.tcp.TH_SYN|dpkt.tcp.TH_RST), self.recv_pkt) - def recv_ip(self, ts, ip): + def teardown(self): + print >>sys.stderr, 'caught %s unique ips' % (len(self.cache),) + + def recv_pkt(self, pc, pkt): + ip = dpkt.ethernet.Ethernet(pkt).ip f = ip.tcp.flags & (dpkt.tcp.TH_SYN|dpkt.tcp.TH_RST) if ip.src not in self.ipcache[f]: self.ipcache[f][ip.src] = 1