All pastes #565632 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-06-14 02:10 UTC
rendered paste body
#!/usr/bin/env python

# $Id: appsnarf.py 17349 2007-06-13 21:11:47Z tyardley $

import base64, time
import dsniff
import appid
import sys

class APPSnarf(dsniff.Handler):
    def setup(self):
        self.subscribe('flow', '', self.recv_flow)

    def recv_flow(self, f):
        if f.state == dsniff.FLOW_START:
            print >>sys.stderr, 'app started'
            for half in f.half.itervalues():
                half.save['_appid'] = appid.appid()
                half.save['_appid_buf'] = half.data or ''
        elif f.state == dsniff.FLOW_CLIENT_DATA:
            print >>sys.stderr, 'app data received'
        app = (-1, 0)
        for half in f.half.itervalues():
            if half.data:
                half.save['_appid_buf'] += half.data
                print >>sys.stderr, 'appid about to process p:%s s:%s d:%s' % (>
                app = half.save['_appid'].process(f.p, f.sport or 0, f.dport or>
                print >>sys.stderr, 'appid returned %s' % (app,)
                if app[0] != 0: # APPID_CONTINUE
                    break
        if app[0] not in (65535, -1, 0): # XXX: 65535 is because application is>
            event = appid.app_to_name(app[0]).lower()
            print >>sys.stderr, 'appid match:', event
            for half in f.half.itervalues():
                del half.save['_appid_buf']
                del half.save['_appid']
            f.unregister(self.recv_flow)


if __name__ == '__main__':
    dsniff.main()