From 6f375d6af07b9cf5b7c0b5f9e6784107ac37ea2f Mon Sep 17 00:00:00 2001 From: Erich Date: Mon, 29 Jun 2020 19:46:00 -0300 Subject: [PATCH] Unix+ipv6+DB --- Sniffy.py | 626 +++++++++++++++++++++++++++++++++---------------- inserebanco.py | 165 +++++++++++++ ip.sqlite | Bin 0 -> 36864 bytes 3 files changed, 589 insertions(+), 202 deletions(-) create mode 100644 inserebanco.py create mode 100644 ip.sqlite diff --git a/Sniffy.py b/Sniffy.py index 301be60..b021322 100644 --- a/Sniffy.py +++ b/Sniffy.py @@ -1,202 +1,424 @@ -#!/usr/bin/env python3 -#=========================================================# -# [+] Title: Simple Network Sniffer # -# [+] Script: Sniffy.py # -# [+] Blog: http://pytesting.blogspot.com # -#=========================================================# - -import socket -import sys -import struct -import time -import sqlite3 -from optparse import OptionParser - -class ip(object): - """ This class deals with the ip header level""" - - def __init__(self, header): - self.header=header - def extract(self): - """ Extract IP Header elements """ - - """ unpack header into: - |_ B(Version+IHL)|B(TOS)|H(TotalLength)|H(ID) - |_ H(Flags+FragmentOffset)|B(TTL)|B(Protocol)|H(CheckSum) - |_ I(Source)|I(Destination) - Note: "R" used to hold the reserved bits""" - - unpacked=struct.unpack("!BBHHHBBHII", self.header) - header=[] - # Version+IHL - header+=unpackBit("4b4b", unpacked[0]) - # TOS: precedence, delay, throughput, reliability, monetary cost, Reserved - header+=unpackBit("3b1b1b1b1b1b", unpacked[1])[:-1] # omit Reserved - # total length - header+=[unpacked[2]] - # datagram id - header+=[unpacked[3]] - # flags(reserved, df, mf), fragment offset - header+=unpackBit("1b1b1b13b", unpacked[4])[1:] # omit Reserved - # Time to live in seconds - header+=[unpacked[5]] - header+=[unpacked[6]] - - header+=[unpacked[7]] - # Source IP Address - source=struct.pack("!I", unpacked[8]) # Pack address in "\xNN\xNN\xNN\xNN" format - source=socket.inet_ntoa(source) - header+=[source] - # Destination IP Address - destination=struct.pack("!I", unpacked[9]) - destination=socket.inet_ntoa(destination) - header+=[destination] - return header - - def parse(self): - header=self.extract() - try: - db=sqlite3.connect("ip.sqlite") - print("IP Header:") - print("|_ Version: %d"%header[0]) - print("|_ Internet Header Length: %d bytes"%(header[1]*4)) - print("|_ Type of Service:") - querry=db.execute("SELECT description FROM precedence WHERE id=%d"%header[2]) - print("|___ Precedence: "+querry.fetchone()[0]) - querry=db.execute("SELECT description FROM delay WHERE id=%d"%header[3]) - print("|___ Delay: "+querry.fetchone()[0]) - querry=db.execute("SELECT description FROM throughput WHERE id=%d"%header[4]) - print("|___ Throughput: "+querry.fetchone()[0]) - querry=db.execute("SELECT description FROM reliability WHERE id=%d"%header[5]) - print("|___ Reliability: "+querry.fetchone()[0]) - querry=db.execute("SELECT description FROM monetary_cost WHERE id=%d"%header[6]) - print("|___ Monetary Cost: "+querry.fetchone()[0]) - print("|_ Total Length: "+hex(header[7])) - print("|_ Identification: "+hex(header[8])) - print("|_ Flags:") - querry=db.execute("SELECT description FROM fragmentation WHERE id=%d"%header[9]) - print("|___ Fragmentation: "+querry.fetchone()[0]) - querry=db.execute("SELECT description FROM more_fragments WHERE id=%d"%header[10]) - print("|___ More Fragments?: "+querry.fetchone()[0]) - print("|_ Fragment Offset: "+hex(header[11])) - print("|_ Time to Live: %d seconds"%header[12]) - querry=db.execute("SELECT description FROM protocol WHERE id=%d"%header[13]) - print("|_ Protocol: "+querry.fetchone()[0]) - print("|_ Header Checksum: "+hex(header[14])) - print("|_ Source IP address: "+header[15]) - print("|_ Destination IP address: "+header[16]) - db.close() - except: - print("[-] Error: ip.sqlite database not found") - - - -def asciiDump(data): - print(" ", end="") - for x in data: - if x in range(32,127): - print(chr(x), end="") - else: - print(".", end="") - print() # new line - -def dump(data): - print("--- DATA DUMP ---") - print("Offset(h) ", end="") - for i in range(16): - print("%02X "%i, end="") - print("\tASCII") - line=0 # every line holds 16 bytes - index=0 # index of the current line in data - for i in range(len(data)): - if i%16==0: - asciiDump(data[index:i]) - index=i - # print the new line address - print("%08X "%line, end="") - line+=1 - print("%02X "%data[i], end="") - - # Padding - i+=1 - while i%16: - print(" ", end="") - i+=1 - # Last line ASCII dump - asciiDump(data[index:]) - print("--- END DUMP ---") - -def unpackBit(fmt, data): - """ unpack data at the bit level """ - try: - # strip "b" separated string into list - elements=fmt.split("b") - # get rid of the empty string added by split - elements=elements[:-1] - # str to int - for i in range(len(elements)): - elements[i]=int(elements[i]) - # length in bits - length=sum(elements, 0) - # convert data to a binary string - binary=bin(data) - # omit '0b' prefix - binary=binary[2:] - # paddings - if length>len(binary): - binary='0'*(length-len(binary))+binary - if length!=len(binary): - raise ValueError("Unmatched size of data") - except ValueError as err: - print("[-] Error: %s"%str(err)) - sys.exit(1) - - # List of unpacked Data - uData=[] - for l in elements: - # Convert the first l bits to decimal - unpacked=int(binary[:l], 2) - uData.append(unpacked) - # git rid of the last unpacked data - binary=binary[l:] - - return uData - -def sniff(sock): - """ sniff a packet, parse it's header and dump the sniffed data """ - packet, address=sock.recvfrom(65565) - ipheader=ip(packet[:20]) # IP Header - ipheader.parse() # display IP header descriptions - dump(packet[20:]) # dump data - -def main(): - parser=OptionParser() - parser.add_option("-n", dest="npackets", type="int",\ - help="Number of packets to sniff") - (options, args)=parser.parse_args() - s=socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP) - try: - # get the current Network Interface - host=socket.gethostbyname(socket.gethostname()) - s.bind((host, 0)) - # Enable the Promiscuous mode - s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON) - if options.npackets!=None: - for i in range(options.npackets): - sniff(s) - else: - while True: - sniff(s) - except socket.error as err: - print("[-] Error: %s"%str(err)) - except KeyboardInterrupt: - print("[+] Keyboard Interruption captured: Existing") - - # Disable the Promiscuous mode - s.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF) - s.close() - -if __name__=="__main__": - main() - - +#!/usr/bin/env python3 +#=========================================================# +# [+] Title: Simple Network Sniffer # +# [+] Script: Sniffy.py # +# [+] Blog: http://pytesting.blogspot.com # +#=========================================================# + +import socket +import sys +import struct +import time +import sqlite3 +from optparse import OptionParser + +class ipv4(object): + """ This class deals with the ip header level""" + + def __init__(self, header): + self.header=header + def extract(self): + """ Extract IP Header elements """ + + """ unpack header into: + |_ B(Version+IHL)|B(TOS)|H(TotalLength)|H(ID) + |_ H(Flags+FragmentOffset)|B(TTL)|B(Protocol)|H(CheckSum) + |_ I(Source)|I(Destination) + Note: "R" used to hold the reserved bits""" + + unpacked=struct.unpack("!BBHHHBBHII", self.header) + header=[] + # Version+IHL + header+=unpackBit("4b4b", unpacked[0]) + # TOS: precedence, delay, throughput, reliability, monetary cost, Reserved + header+=unpackBit("3b1b1b1b1b1b", unpacked[1])[:-1] # omit Reserved + # total length + header+=[unpacked[2]] + # datagram id + header+=[unpacked[3]] + # flags(reserved, df, mf), fragment offset + header+=unpackBit("1b1b1b13b", unpacked[4])[1:] # omit Reserved + # Time to live in seconds + header+=[unpacked[5]] + # Next Protocol + header+=[unpacked[6]] + # Header Checksum + header+=[unpacked[7]] + # Source IP Address + source=struct.pack("!I", unpacked[8]) # Pack address in "\xNN\xNN\xNN\xNN" format + source=socket.inet_ntoa(source) + header+=[source] + # Destination IP Address + destination=struct.pack("!I", unpacked[9]) + destination=socket.inet_ntoa(destination) + header+=[destination] + return header + + def parse(self): + header=self.extract() + try: + db=sqlite3.connect("ip.sqlite") + print("----IP Header----") + print("\tVersion: %d"%header[0]) + print("\tInternet Header Length: %d bytes"%(header[1]*4)) + print("\tType of Service:") + querry=db.execute("SELECT description FROM precedence WHERE id=%d"%header[2]) + print("\t\tPrecedence: "+querry.fetchone()[0]) + querry=db.execute("SELECT description FROM delay WHERE id=%d"%header[3]) + print("\t\tDelay: "+querry.fetchone()[0]) + querry=db.execute("SELECT description FROM throughput WHERE id=%d"%header[4]) + print("\t\tThroughput: "+querry.fetchone()[0]) + querry=db.execute("SELECT description FROM reliability WHERE id=%d"%header[5]) + print("\t\tReliability: "+querry.fetchone()[0]) + querry=db.execute("SELECT description FROM monetary_cost WHERE id=%d"%header[6]) + print("\t\tMonetary Cost: "+querry.fetchone()[0]) + print("\tTotal Length: %d bytes"%(header[7])) + print("\tIdentification: "+hex(header[8])+ " (%d)"%(header[8])) + print("\tFlags:") + querry=db.execute("SELECT description FROM fragmentation WHERE id=%d"%header[9]) + print("\t\tFragmentation: "+querry.fetchone()[0]) + querry=db.execute("SELECT description FROM more_fragments WHERE id=%d"%header[10]) + print("\t\tMore Fragments?: "+querry.fetchone()[0]) + print("\tFragment Offset: "+hex(header[11])) + print("\tTime to Live: %d seconds"%header[12]) + querry=db.execute("SELECT description FROM protocol WHERE id=%d"%header[13]) + print("\tProtocol: "+querry.fetchone()[0]) + print("\tHeader Checksum: "+hex(header[14])) + print("\tSource IP address: "+header[15]) + print("\tDestination IP address: "+header[16]) + db.close() + return header[13] #nextp + except: + print("[-] Error: ip.sqlite database not found") + +class ipv6(object): + """ This class deals with the ip header level""" + + def __init__(self, header): + self.header=header + def extract(self): + """ Extract IPv6 Header elements """ + + unpacked=struct.unpack("!IHBB16s16s", self.header) + header=[] + # Version+Traffic Class + Flow Label + header+=unpackBit("4b8b20b", unpacked[0]) + # Payload Length + header+=[unpacked[1]] + # Next Header + header+=[unpacked[2]] + # Hop Limit + header+=[unpacked[3]] + # IP Address + ipv6_src_ip = socket.inet_ntop(socket.AF_INET6, self.header[8:24]) + header+=[ipv6_src_ip] + ipv6_dst_ip = socket.inet_ntop(socket.AF_INET6, self.header[24:40]) + header+=[ipv6_dst_ip] + return header + + def parse(self): + header=self.extract() + try: + db=sqlite3.connect("ip.sqlite") + print("Version: %d"%header[0]) + print("\tTraffic Class: %x"%header[1]) + print("\tFlow Label: %x"%header[2]) + print("\tPayload Length: %d"%header[3]) + querry=db.execute("SELECT description FROM protocol WHERE id=%d"%header[4]) + print("\tNext Header: "+querry.fetchone()[0]) + print("\tHop Limit: %d"%header[5]) + print("\tAddress: %s"%header[6]) + print("\tAddress: %s"%header[7]) + db.close() + return header[4] #nextp + except: + print("[-] Error: ip.sqlite database not found") + +def nextHeader(nextp): + try: + db=sqlite3.connect("ip.sqlite") + querry=db.execute("SELECT description FROM protocol WHERE id=%d"%header[4]) + nextp = querry.fetchone([0]) + db.close() + return nextp + except: + print("[-] Error: ip.sqlite database not found") + +def hopHeader(newPacket): + packet = struct.unpack("!2b", newPacket[0:2]) + next_header = packet[0] + hdr_ext_len = packet[1] + + print ("----HOP-BY-HOP----") + print ("\tNext Header: %s" % nextHeader(next_header)) + print ("\tHeader Extension Length: %s" % (hdr_ext_len*8 + 8)) + + newPacket = newPacket[int(hdr_ext_len*8 + 8):] + return newPacket, next_header + +def destinationHeader(newPacket): + packet = struct.unpack("!2b", newPacket[0:2]) + next_header = packet[0] + hdr_ext_len = packet[1] + + print ("----DESTINATION OPTIONS HEADER----") + print ("\tNext Header: %s" % nextHeader(next_header)) + print ("\tHeader Extension Length: %s" % (hdr_ext_len*8 + 8)) + + newPacket = newPacket[int(hdr_ext_len*8 + 8):] + return newPacket, next_header + +def routingHeader(newPacket): + packet = struct.unpack("!4B", newPacket[0:4]) + next_header = packet[0] + hdr_ext_len = packet[1] + routing_type = packet[2] + seg_left = packet[3] + + print ("----ROUTING HEADER----") + print ("\tNext Header: %s" % nextHeader(next_header)) + print ("\tHeader Extension Length: %s" % (hdr_ext_len)) + print ("\tRouting Type: %s" % (routing_type)) + print ("\tSegments Left: %s" % (seg_left)) + + newPacket = newPacket[int(hdr_ext_len*8 + 8):] + return newPacket, next_header + +def fragmentHeader(newPacket): + packet = struct.unpack("!2B1H1I", newPacket[0:8]) + next_header = packet[0] + reserved = packet[1] + frag_offset = packet[2] >> 3 + identification = packet[3] + + print ("----FRAGMENT HEADER----") + print ("\tNext Header: %s" % nextHeader(next_header)) + print ("\tReserved: %s" % (reserved)) + print ("\tFragment Offset: %s" % (frag_offset)) + print ("\tIdentification: %s" % (identification)) + + newPacket = newPacket[8:] + return newPacket, next_header + +def authenticationHeader(newPacket): + packet = struct.unpack("!2b", newPacket[0:2]) + next_header = packet[0] + payload_len = packet[1] + + print ("----AUTHENTICATION HEADER----") + print ("\tNext Header: %s" % nextHeader(next_header)) + print ("\tHeader Extension Length: %s" % (payload_len*4 + 8)) + + newPacket = newPacket[int(payload_len*4 + 8):] + return newPacket, next_header + +def ICMP(newPacket): + + packet = struct.unpack("!BBH",newPacket[:4]) + print ("----ICMP HEADER----") + print ("\tType: "+ str(packet[0])) + print ("\tCode: "+ str(packet[1])) + print ("\tCheckSum: "+ str(packet[2])) + + packet = newPacket [4:] + return packet + +def ICMPv6(newPacket): + + packet = struct.unpack("!BBH",newPacket[:4]) + print ("----ICMPv6 HEADER----") + print ("\tType: "+ str(packet[0])) + print ("\tCode: "+ str(packet[1])) + print ("\tCheckSum: "+ str(packet[2])) + + packet = newPacket [4:] + return packet + +def UDPHeader(newPacket): + packet = struct.unpack("!4H",newPacket[:8]) + print ("----UDP HEADER----") + print ("\tSource Port: "+str(packet[0])) + print ("\tDestination Port: "+str(packet[1])) + print ("\tLenght: "+str(packet[2])) + print ("\tChecksum: "+str(packet[3])) + + packet = newPacket[8:] + return packet + +def TCPHeader(newPacket): + packet = struct.unpack("!2H2I4H",newPacket[0:20]) + print ("----TCP HEADER----") + print ("\tSource Port: "+str(packet[0])) + print ("\tDestination Port: "+str(packet[1])) + print ("\tSequence Number: "+str(packet[2])) + print ("\tAck. Number: "+str(packet[3])) + print ("\tData Offset: "+str(packet[4] >> 12)) + print ("\tReserved: "+str((packet[4] >> 6) & 0x003F)) + tcpFlags = packet[4] & 0x003F + print ("\tTCP Flags: "+str(tcpFlags)) + urgFlag = tcpFlags & 0x0020 #1111 1111 1111 1111 & 0000 0000 0010 0000 + if(urgFlag == 32): + print ("\tUrgent Flag: Set") + ackFlag = tcpFlags & 0x0010 + if(ackFlag == 16): + print ("\tAck Flag: Set") + pushFlag = tcpFlags & 0x0008 + if(pushFlag == 8): + print ("\tPush Flag: Set") + resetFlag = tcpFlags & 0x0004 + if(resetFlag == 4): + print ("\tReset Flag: Set") + synFlag = tcpFlags & 0x0002 + if(synFlag == 2): + print ("\tSyn Flag: Set") + finFlag = tcpFlags & 0x0001 + if(finFlag == True): + print ("\tFin Flag: Set") + + print ("\tWindow: "+str(packet[5])) + print ("\tChecksum: "+str(packet[6])) + print ("\tUrgent Pointer: "+str(packet[7])) + + packet = newPacket[20:] + return packet + +def asciiDump(data): + print(" ", end="") + for x in data: + if x in range(32,127): + print(chr(x), end="") + else: + print(".", end="") + print() # new line + +def dump(data): + print("--- DATA DUMP ---") + print("Offset(h) ", end="") + for i in range(16): + print("%02X "%i, end="") + print("\tASCII") + line=0 # every line holds 16 bytes + index=0 # index of the current line in data + for i in range(len(data)): + if i%16==0: + asciiDump(data[index:i]) + index=i + # print the new line address + print("%08X "%line, end="") + line+=1 + print("%02X "%data[i], end="") + + # Padding + i+=1 + while i%16: + print(" ", end="") + i+=1 + # Last line ASCII dump + asciiDump(data[index:]) + print("--- END DUMP ---") + print("********************************************************************") + +def unpackBit(fmt, data): + """ unpack data at the bit level """ + try: + # strip "b" separated string into list + elements=fmt.split("b") + # get rid of the empty string added by split + elements=elements[:-1] + # str to int + for i in range(len(elements)): + elements[i]=int(elements[i]) + # length in bits + length=sum(elements, 0) + # convert data to a binary string + binary=bin(data) + # omit '0b' prefix + binary=binary[2:] + # paddings + if length>len(binary): + binary='0'*(length-len(binary))+binary + if length!=len(binary): + raise ValueError("Unmatched size of data") + except ValueError as err: + print("[-] Error: %s"%str(err)) + sys.exit(1) + + # List of unpacked Data + uData=[] + for l in elements: + # Convert the first l bits to decimal + unpacked=int(binary[:l], 2) + uData.append(unpacked) + # git rid of the last unpacked data + binary=binary[l:] + + return uData + +def sniff(packet): + + """ sniff a packet, parse it's header and dump the sniffed data """ + eHeader = struct.unpack("!H",packet[12:14]) + version = hex(eHeader[0]) + if version == '0x800': #ipv4 + ipheader=ipv4(packet[14:34]) # IP Header + nextp = ipheader.parse() + newpacket = packet[34:] + elif version == '0x86dd': #ipv6 + ipheader=ipv6(packet[14:54]) # IP Header + nextp = ipheader.parse() + newpacket = packet[54:] + else: + return + + if (nextp == 0): #IPv6 Hop-by-Hop Option + newpacket, nextp = hopHeader(newpacket) + if (nextp == 60): #Destination Options for IPv6 + newpacket, nextp = destinationHeader(newpacket) + if (nextp == 43): #IPv6 Routing header + newpacket, nextp = routingHeader(newpacket) + if (nextp == 44): #IPv6 Fragment header + newpacket, nextp = fragmentHeader(newpacket) + if (nextp == 51): #AH, Authentication Header + newpacket, nextp = authenticationHeader(newpacket) + # if (nextp == 50): #ESP, Encapsulating Security Payload + # newpacket, nextp = encapsulingHeader(newpacket) + if (nextp == 60): #Destination Options for IPv6 + newpacket, nextp = destinationHeader(newpacket) + + + if nextp == 6: # next protocol = TCP + newpacket = TCPHeader(newpacket) + elif nextp == 17: # next protocol = UDP + newpacket = UDPHeader(newpacket) + elif nextp == 1: # next protocol = ICMP + newpacket = ICMP(newpacket) + elif nextp == 58: + newpacket = ICMPv6(newpacket) + dump(newpacket) + +def main(): + parser=OptionParser() + parser.add_option("-n", dest="npackets", type="int",\ + help="Number of packets to sniff") + (options, args)=parser.parse_args() + newPacket,nextProto = '','' + #os.system('clear') + packet = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(0x003)) + try: + if options.npackets!=None: + for i in range(options.npackets): + s = packet.recv(65356) + sniff(s) + else: + while True: + s = packet.recv(65356) + sniff(s) + except socket.error as err: + print("[-] Error: %s"%str(err)) + except KeyboardInterrupt: + print("[+] Keyboard Interruption captured: Existing") + +if __name__=="__main__": + main() + + diff --git a/inserebanco.py b/inserebanco.py new file mode 100644 index 0000000..e542666 --- /dev/null +++ b/inserebanco.py @@ -0,0 +1,165 @@ +import sqlite3 + + +try: + db=sqlite3.connect("ip.sqlite") + + #Criação das tabelas + # db.execute(""" + # CREATE TABLE delay(description text(30), id integer) + # """) + # db.execute(""" + # CREATE TABLE throughput(description text(30), id integer) + # """) + # db.execute(""" + # CREATE TABLE reliability(description text(30), id integer) + # """) + # db.execute(""" + # CREATE TABLE monetary_cost(description text(30), id integer) + # """) + # db.execute(""" + # CREATE TABLE fragmentation(description text(30), id integer) + # """) + # db.execute(""" + # CREATE TABLE more_fragments(description text(30), id integer) + # """) + # db.execute(""" + # CREATE TABLE protocol(description text(30), id integer) + # """) + + #Inserção de dado + # db.execute("INSERT INTO precedence VALUES ('0 - Routine or Best Effort', 0)") + # db.execute("INSERT INTO precedence VALUES ('1 - Priority', 1)") + # db.execute("INSERT INTO precedence VALUES ('2 - Immediate', 2)") + # db.execute("INSERT INTO precedence VALUES ('3 - Flash', 3)") + # db.execute("INSERT INTO precedence VALUES ('4 - Flash Override', 4)") + # db.execute("INSERT INTO precedence VALUES ('5 - Critical', 5)") + # db.execute("INSERT INTO precedence VALUES ('6 - Internetwork Control', 6)") + # db.execute("INSERT INTO precedence VALUES ('7 - Network Control', 7)") + + # db.execute("INSERT INTO delay VALUES ('0 - Normal delay', 0)") + # db.execute("INSERT INTO delay VALUES ('1 - Low delay', 1)") + + # db.execute("INSERT INTO throughput VALUES ('0 - Normal throughput', 0)") + # db.execute("INSERT INTO throughput VALUES ('1 - High throughput', 1)") + + # db.execute("INSERT INTO reliability VALUES ('0 - Normal reliability', 0)") + # db.execute("INSERT INTO reliability VALUES ('1 - High reliability', 1)") + + # db.execute("INSERT INTO monetary_cost VALUES ('0 - Normal monetary cost', 0)") + # db.execute("INSERT INTO monetary_cost VALUES ('1 - Minimize monetary cost', 1)") + + # db.execute("INSERT INTO fragmentation VALUES ('0 - Fragment if necessary', 0)") + # db.execute("INSERT INTO fragmentation VALUES ('1 - Do not fragment', 1)") + + # db.execute("INSERT INTO more_fragments VALUES ('0 - This is the last fragment', 0)") + # db.execute("INSERT INTO more_fragments VALUES ('1 - More fragments follow this fragment', 1)") + + # db.execute("INSERT INTO protocol VALUES ('0 - IPv6 Hop-by-Hop Option', 0)") + # db.execute("INSERT INTO protocol VALUES ('1 - ICMP, Internet Control Message Protocol', 1)") + # db.execute("INSERT INTO protocol VALUES ('2 - IGMP, Internet Group Management Protocol', 2)") + # db.execute("INSERT INTO protocol VALUES ('3 - GGP, Gateway to Gateway Protocol', 3)") + # db.execute("INSERT INTO protocol VALUES ('4 - IP in IP encapsulation', 4)") + # db.execute("INSERT INTO protocol VALUES ('5 - ST, Internet Stream Protocol', 5)") + # db.execute("INSERT INTO protocol VALUES ('6 - TCP, Transmission Control Protocol', 6)") + # db.execute("INSERT INTO protocol VALUES ('7 - UCL, CBT', 7)") + # db.execute("INSERT INTO protocol VALUES ('8 - EGP, Exterior Gateway Protocol', 8)") + # db.execute("INSERT INTO protocol VALUES ('9 - IGRP', 9)") + # db.execute("INSERT INTO protocol VALUES ('10 - BBN RCC Monitoring', 10)") + # db.execute("INSERT INTO protocol VALUES ('11 - NVP, Network Voice Protocol', 11)") + # db.execute("INSERT INTO protocol VALUES ('12 - PUP', 12)") + # db.execute("INSERT INTO protocol VALUES ('13 - ARGUS',13)") + # db.execute("INSERT INTO protocol VALUES ('14 - EMCON, Emission Control Protocol',14)") + # db.execute("INSERT INTO protocol VALUES ('15 - XNET, Cross Net Debugger',15)") + # db.execute("INSERT INTO protocol VALUES ('16 - Chaos',16)") + # db.execute("INSERT INTO protocol VALUES ('17 - UDP, User Datagram Protocol',17)") + # db.execute("INSERT INTO protocol VALUES ('18 - TMux, Transport Multiplexing Protocol',18)") + # db.execute("INSERT INTO protocol VALUES ('19 - DCN Measurement Subsystems',19)") + # db.execute("INSERT INTO protocol VALUES ('20 - HMP, Host Monitoring Protocol',20)") + # db.execute("INSERT INTO protocol VALUES ('21 - Packet Radio Measurement',21)") + # db.execute("INSERT INTO protocol VALUES ('22 - XEROX NS IDP',22)") + # db.execute("INSERT INTO protocol VALUES ('23 - Trunk-1',23)") + # db.execute("INSERT INTO protocol VALUES ('24 - Trunk-2',24)") + # db.execute("INSERT INTO protocol VALUES ('25 - Leaf-1',25)") + # db.execute("INSERT INTO protocol VALUES ('26 - Leaf-2',26)") + # db.execute("INSERT INTO protocol VALUES ('27 - RDP, Reliable Data Protocol',27)") + # db.execute("INSERT INTO protocol VALUES ('28 - IRTP, Internet Reliable Transaction Protocol',28)") + # db.execute("INSERT INTO protocol VALUES ('29 - ISO Transport Protocol Class 4',29)") + # db.execute("INSERT INTO protocol VALUES ('30 - NETBLT, Network Block Transfer',30)") + # db.execute("INSERT INTO protocol VALUES ('31 - MFE Network Services Protocol',31)") + # db.execute("INSERT INTO protocol VALUES ('32 - MERIT Internodal Protocol',32)") + # db.execute("INSERT INTO protocol VALUES ('33 - Sequential Exchange Protocol',33)") + # db.execute("INSERT INTO protocol VALUES ('34 - Third Party Connect Protocol',34)") + # db.execute("INSERT INTO protocol VALUES ('35 - IDPR, Inter-Domain Policy Routing Protocol',35)") + # db.execute("INSERT INTO protocol VALUES ('36 - XTP, Xpress Transfer Protocol',36)") + # db.execute("INSERT INTO protocol VALUES ('37 - Datagram Delivery Protocol',37)") + # db.execute("INSERT INTO protocol VALUES ('38 - IDPR, Control Message Transport Protocol',38)") + # db.execute("INSERT INTO protocol VALUES ('39 - TP++ Transport Protocol',39)") + # db.execute("INSERT INTO protocol VALUES ('40 - IL Transport Protocol',40)") + # db.execute("INSERT INTO protocol VALUES ('41 - IPv6 over IPv4',41)") + # db.execute("INSERT INTO protocol VALUES ('42 - SDRP, Source Demand Routing Protocol',42)") + # db.execute("INSERT INTO protocol VALUES ('43 - IPv6 Routing header',43)") + # db.execute("INSERT INTO protocol VALUES ('44 - IPv6 Fragment header',44)") + # db.execute("INSERT INTO protocol VALUES ('45 - IDRP, Inter-Domain Routing Protocol',45)") + # db.execute("INSERT INTO protocol VALUES ('46 - RSVP, Reservation Protocol',46)") + # db.execute("INSERT INTO protocol VALUES ('47 - GRE, General Routing Encapsulation',47)") + # db.execute("INSERT INTO protocol VALUES ('48 - MHRP, Mobile Host Routing Protocol',48)") + # db.execute("INSERT INTO protocol VALUES ('49 - BNA',49)") + # db.execute("INSERT INTO protocol VALUES ('50 - ESP, Encapsulating Security Payload',50)") + # db.execute("INSERT INTO protocol VALUES ('51 - AH, Authentication Header',51)") + # db.execute("INSERT INTO protocol VALUES ('52 - Integrated Net Layer Security TUBA',52)") + # db.execute("INSERT INTO protocol VALUES ('53 - IP with Encryption',53)") + # db.execute("INSERT INTO protocol VALUES ('54 - NARP, NBMA Address Resolution Protocol',54)") + # db.execute("INSERT INTO protocol VALUES ('55 - Minimal Encapsulation Protocol',55)") + # db.execute("INSERT INTO protocol VALUES ('56 - TLSP, Transport Layer Security Protocol',56)") + # db.execute("INSERT INTO protocol VALUES ('57 - SKIP',57)") + # db.execute("INSERT INTO protocol VALUES ('58 - ICMPv6, Internet Control Message Protocol for IPv6',58)") + # db.execute("INSERT INTO protocol VALUES ('59 - IPv6 No Next Header',59)") + # db.execute("INSERT INTO protocol VALUES ('60 - Destination Options for IPv6',60)") + # db.execute("INSERT INTO protocol VALUES ('61 - Any host internal protocol',61)") + # db.execute("INSERT INTO protocol VALUES ('62 - CFTP',62)") + # db.execute("INSERT INTO protocol VALUES ('63 - Any local network',63)") + # db.execute("INSERT INTO protocol VALUES ('64 - SATNET and Backroom EXPAK',64)") + # db.execute("INSERT INTO protocol VALUES ('65 - Kryptolan',65)") + # db.execute("INSERT INTO protocol VALUES ('66 - MIT Remote Virtual Disk Protocol',66)") + # db.execute("INSERT INTO protocol VALUES ('67 - Internet Pluribus Packet Core',67)") + # db.execute("INSERT INTO protocol VALUES ('68 - Any distributed file system',68)") + # db.execute("INSERT INTO protocol VALUES ('69 - SATNET Monitoring',69)") + # db.execute("INSERT INTO protocol VALUES ('70 - VISA Protocol',70)") + # db.execute("INSERT INTO protocol VALUES ('71 - Internet Packet Core Utility',71)") + # db.execute("INSERT INTO protocol VALUES ('72 - Computer Protocol Network Executive',72)") + # db.execute("INSERT INTO protocol VALUES ('73 - Computer Protocol Heart Beat',73)") + # db.execute("INSERT INTO protocol VALUES ('74 - Wang Span Network',74)") + # db.execute("INSERT INTO protocol VALUES ('75 - Packet Video Protocol',75)") + # db.execute("INSERT INTO protocol VALUES ('76 - Backroom SATNET Monitoring',76)") + # db.execute("INSERT INTO protocol VALUES ('77 - SUN ND PROTOCOL-Temporary',77)") + # db.execute("INSERT INTO protocol VALUES ('78 - WIDEBAND Monitoring',78)") + # db.execute("INSERT INTO protocol VALUES ('79 - WIDEBAND EXPAK',79)") + # db.execute("INSERT INTO protocol VALUES ('80 - ISO Internet Protocol',80)") + # db.execute("INSERT INTO protocol VALUES ('81 - VMTP, Versatile Message Transaction Protocol',81)") + # db.execute("INSERT INTO protocol VALUES ('82 - SECURE-VMTP',82)") + # db.execute("INSERT INTO protocol VALUES ('83 - VINES',83)") + # db.execute("INSERT INTO protocol VALUES ('84 - TTP',84)") + # db.execute("INSERT INTO protocol VALUES ('85 - NSFNET-IGP',85)") + # db.execute("INSERT INTO protocol VALUES ('86 - Dissimilar Gateway Protocol',86)") + # db.execute("INSERT INTO protocol VALUES ('87 - TCF',87)") + # db.execute("INSERT INTO protocol VALUES ('88 - EIGRP',88)") + # db.execute("INSERT INTO protocol VALUES ('89 - OSPF / MOSPF',89)") + # db.execute("INSERT INTO protocol VALUES ('90 - Sprite RPC Protocol',90)") + # db.execute("INSERT INTO protocol VALUES ('91 - Locus Address Resolution Protocol',91)") + # db.execute("INSERT INTO protocol VALUES ('92 - MTP, Multicast Transport Protocol',92)") + # db.execute("INSERT INTO protocol VALUES ('93 - AX.25',93)") + # db.execute("INSERT INTO protocol VALUES ('94 - IP-within-IP Encapsulation Protocol',94)") + # db.execute("INSERT INTO protocol VALUES ('95 - Mobile Internetworking Control Protocol',95)") + # db.execute("INSERT INTO protocol VALUES ('96 - Semaphore Communications Sec. Pro',96)") + # db.execute("INSERT INTO protocol VALUES ('97 - Ethernet-within-IP Encapsulation',97)") + # db.execute("INSERT INTO protocol VALUES ('98 - Encapsulation Header',98)") + # db.execute("INSERT INTO protocol VALUES ('99 - Any private encryption scheme',99)") + # db.execute("INSERT INTO protocol VALUES ('100 - GMTP',100)") + + teste = db.execute("SELECT * FROM protocol WHERE id==6") + print(teste.fetchone()) + db.commit() + db.close() +except: + print("[-] Error: ip.sqlite database not found") diff --git a/ip.sqlite b/ip.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..948746a190eff950cac6f2afed6c316d0c05f87e GIT binary patch literal 36864 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 YGrBPI|LL)QS=kG09R%QoZ?7@_1xM}bwEzGB literal 0 HcmV?d00001