Skip to content

Instantly share code, notes, and snippets.

@ytakano
Last active November 22, 2015 20:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ytakano/87fcb3377df3c29c60c3 to your computer and use it in GitHub Desktop.
Save ytakano/87fcb3377df3c29c60c3 to your computer and use it in GitHub Desktop.
skelton for the flow abstractor (TCP)
import socket
import sys
class fabs_skel:
def openif(self, path):
self._path = path
self._session = {}
self.__sock = socket.socket(socket.AF_UNIX)
try:
self.__sock.connect(path)
except socket.error, msg:
print >>sys.stderr, msg
sys.exit(1)
def run(self):
sf = self.__sock.makefile()
while True:
line = sf.readline()
h = {}
dfrom = 0
# read header
try:
self.__parse_header(line, h)
# generate session ID
sid = (h['ip1'], h['ip2'], h['port1'], h['port2'], h['hop'])
event = h['event']
if event == 'DATA':
dlen = int(h['len'])
dfrom = int(h['from'])
except KeyError, msg:
print >>sys.stderr, "illeal header:", msg
sys.exit(1)
# handle event
if event == 'CREATED':
self._session[sid] = ([], [])
self.in_event(h, sid, event, dfrom)
elif event == 'DESTROYED':
del self._session[sid]
self.in_event(h, sid, event, dfrom)
elif event == 'DATA':
# read data
data = sf.read(dlen)
if sid in self._session:
if dfrom == 1:
self._session[sid][0].append(data)
else:
self._session[sid][1].append(data)
self.in_event(h, sid, event, dfrom)
def in_event(self, header, sid, event, dfrom):
# data is stored to self._session[sid]
# dfrom indicates source of data
# this means that new arrival data is stored to
# self._session[sid][dfrom - 1]
# just print
print header
if event == 'DATA':
print self._session[sid][dfrom - 1].pop(0)
def __parse_header(self, line, header):
line = line.strip()
for kv in line.split(','):
sp = kv.split('=')
header[sp[0]] = sp[1]
if __name__ == '__main__':
fabs = fabs_skel()
fabs.openif("/tmp/sf-tap/tcp/http")
fabs.run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment