示例#1
0
class Sniffer(object):

    def __init__(self, args):
        self.index=0

        # Parametros
        self.file = args[FILE_PARAM]
        self.entropy_file = args[ENTROPY_FILE_PARAM]
        self.arp_entropy_file = args[ARP_ENTROPY_FILE_PARAM]
        self.timeout = args[TIMEOUT_PARAM]
        self.arp = args[ARP_PARAM_ALIAS]
        self.console = args[CONSOLE_PARAM]

        # Variables
        self.entropyCalculator = EntropyCalculator()
        self.arp_text= {
            SCAPY_WHO_HAS : WHO_HAS_TEXT,
            SCAPY_IS_AT : IS_AT_TEXT
        } 

    def run(self):

        self.file.write(FILE_HEADER)
        sniff(prn=self.writePacketToFile, timeout = self.timeout, filter=self.arp)
        self.file.close()

        self.entropyCalculator.write_to_file(self.entropy_file)

        self.entropyCalculator.arp_write_to_file(self.arp_entropy_file)

    def writePacketToFile(self, packet):

        if ARP in packet:
            packetInfo =  time.strftime("%d/%m/%y - %H:%M:%S")
            packetInfo += self.decorate(packet[1].hwsrc)
            packetInfo += self.decorate(packet[1].hwdst)
            packetInfo += self.decorate(packet[1].psrc)
            packetInfo += self.decorate(packet[1].pdst)
            packetInfo += self.decorate(self.arp_text[packet[1].op])

        else:
            packetInfo = time.strftime("%d/%m/%y - %H:%M:%S")
            packetInfo += self.decorate(packet.src)
            packetInfo += self.decorate(packet.dst)

            if IP in packet:
                packetInfo += self.decorate(packet[IP].src)
                packetInfo += self.decorate(packet[IP].dst)
            else:
                packetInfo += FAKE_IP
                packetInfo += FAKE_IP

            packetInfo += self.decorate(packet[1].name)

        if self.console:
            print(packetInfo)

        packetInfo += '\n'
        self.file.write(packetInfo)
        self.index+=1

        self.entropyCalculator.arp_entropyUpdate(packet)
        
        self.entropyCalculator.entropyUpdate(packet)

    def decorate(self, obj):
        return "\t" + str(obj)