123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import socket
- import textwrap
- import eth
- import ip
- import transport
- def multi_line(prefix, string, size=80):
- size -= len(prefix)
- if isinstance(string, bytes):
- string = ''.join(r'\x{:02x}'.format(byte) for byte in string)
- if size % 2:
- size -= 1
- return '\n'.join([prefix + line for line in textwrap.wrap(string, size)])
- TAB1 = "\t"
- TAB2 = "\t\t"
- TAB3 = "\t\t\t"
- conn = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.ntohs(3))
- if __name__ == "__main__":
- while True:
- raw_data, addr = conn.recvfrom(65535)
- dest_mac, src_mac, eth_proto, data = eth.ethernet_unpack(raw_data)
- version, header_len, tos, total_len, identification, x_bit, DFF, MFF, frag_offset, TTL, proto, header_checksum , s_ip, d_ip, data = ip.ip_unpack(data)
- print("Ethernet Frame")
- print(TAB1 + "- Destination Mac : {} , Source Mac : {} , Protocol : {}" .format(str(dest_mac), str(src_mac), str(eth_proto)))
- print(TAB1 + "- IPv4 Packet")
- print("""{}-Version : {}, Header Length : {}, TOS : {}, Total Length : {}
- {}- ID : {}, Flags : {}|{}|{}, Fragment Offset : {}, TTL : {}
- {}- Protocol : {}, Checksum : {}, Source IP : {}, Destination IP : {}""" .format(TAB2, str(version), str(header_len), str(tos), str(total_len), TAB2, str(identification), str(x_bit), str(DFF), str(MFF), str(frag_offset), str(TTL), TAB2, str(proto), str(header_checksum), str(s_ip), str(d_ip) ))
- if str(proto) == "1":
- icmp_type, icmp_code, icmp_checksum, data = ip.icmp_unpack(data)
- print(TAB2 + "- ICMP Packet")
- print(TAB3 + "- Type : {}, Code : {}, Checksum : {}" .format(str(icmp_type), str(icmp_code), str(icmp_checksum)))
- print(TAB3 + "- Data")
- print(multi_line(TAB3, data))
- elif str(proto) == "6":
- s_port, d_port, seq_no, ack_no, cwr, ece, urg, ack, psh, rst, syn, fin , window, checksum, urg_pointer, data = transport.tcp_unpack(data)
- print(TAB2 + "- TCP Segment")
- print(TAB3 + """- Source Port : {}, Destination Port : {}, SEQ No : {}, ACK No : {}
- {}- Flags : {}|{}|{}|{}|{}|{}|{}|{}
- {}- Window : {}, Checksum : {}, URG Pointer : {}""" .format( str(s_port), str(d_port), str(seq_no), str(ack_no), TAB3, str(cwr), str(ece), str(urg), str(ack), str(psh), str(rst), str(syn), str(fin), TAB3, str(window), str(checksum), str(urg_pointer) ))
- print(TAB2 + "- Data")
- print(multi_line(TAB3, data))
- elif str(proto) == "17":
- s_port, d_port, length, checksum, data = transport.udp_unpack(data)
- print(TAB2 + "- UDP Datagram")
- print(TAB3 + "- Source Port : {}, Destination Port : {}, Length : {}, Checksum : {}" .format(str(s_port), str(d_port), str(length), str(checksum)))
- print(TAB3 + "- Data")
- print(multi_line(TAB3, data))
|