import sys import struct import csv import time IP_SRC = "081.169.252.034" def port_dst_src_to_ip(port_dst, port_src): """ Convert a destination/source port to an IP addresse asuuming encoding type 5 and 32 marker value bits. """ ip_1 = port_dst >> 8 ip_2 = port_dst & 0xFF ip_3 = port_src >> 8 ip_4 = port_src & 0xFF return "%d.%d.%d.%d" % (ip_1, ip_2, ip_3, ip_4) def decode_single(port_dst, port_src): ip = port_dst_src_to_ip(port_dst, port_src) print("port dst=%d, port src=%d, IP= %s" % (port_dst, port_src, ip)) def decode_file(filename_read): filename_write = filename_read + "_decoded_ips.txt" fd_read = open(filename_read, "r") fd_write = open(filename_write, "w") fd_read.readline() csv_reader = csv.reader(fd_read, delimiter=' ') cnt = 0 for val in csv_reader: if len(val) < 5: continue if cnt % 200000 == 0: print("...") cnt += 1 if val[3] != IP_SRC: continue try: port_dst, port_src = int(val[5]), int(val[4]) ip = port_dst_src_to_ip(port_dst, port_src) #print("%d %d -> %s" % (port_dst, port_src, ip)) fd_write.write(ip +"\n") except ValueError as ex: #print(ex) # integer conversion exceptions (malformed CSV) pass #time.sleep(0.5) fd_read.close() fd_write.close() if len(sys.argv) < 2: print("usage: python script.py [single|file] [destination_port] [source_port]") sys.exit(1) if sys.argv[1] == "single": port_dst = int(sys.argv[2]) port_src = int(sys.argv[3]) decode_single(port_dst, port_src) else: decode_file(sys.argv[2])