10
from struct import unpack
20
return ''.join(spaced(value))
22
class RecordHandler(asyncore.dispatcher_with_send):
25
def setup (self,name,ip,port):
26
now = time.strftime("%a-%d-%b-%Y-%H:%M:%S", time.gmtime())
27
self.record = open("%s-%s" % (name,now),'w')
29
self.record.write('Connection from %s:%d\n' % (ip,port))
31
def handle_read (self):
38
bytes = self.recv(_read_size)
39
except socket.error, e:
40
if e.errno in (errno.EWOULDBLOCK,errno.EAGAIN):
44
print "connection closed"
47
if len(bytes) == _read_size:
50
print "%d" % len(bytes),
54
self.record.write(bytes)
61
self.record.write('%02X' % ord(byte))
62
count = (count + 1) % 32
64
self.record.write('\n')
68
self.record.write(' ')
73
except KeyboardInterrupt:
77
class RecordServer(asyncore.dispatcher):
78
def __init__(self, host, port,name):
79
asyncore.dispatcher.__init__(self)
80
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
82
self.bind((host, port))
86
def handle_accept(self):
89
sock, (ip,port) = pair
90
print "new BGP connection from %s:%d" % (ip, port)
91
handler = RecordHandler(sock).setup(self.name,ip,port)
100
for name in ['nobody',]:
102
user = pwd.getpwnam(name)
103
nuid = int(user.pw_uid)
104
ngid = int(user.pw_uid)
114
server = RecordServer(sys.argv[1], int(sys.argv[2]), sys.argv[3])
118
except (KeyboardInterrupt,SystemExit):