All pastes #562326 Raw Edit

Someone

public text v1 · immutable
·published 2007-06-12 19:18 UTC
rendered paste body
--- 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