Ejemplo n.º 1
0
 def get_packet(self):
     selected_transport_layer = self.combo_box_transport.currentIndex()
     packet = Packet()
     eth_layer = {}
     eth_layer["LayerType"] = "Ethernet"
     eth_layer["Source MAC"] = str(self.line_edit_source_mac.text())
     eth_layer["Destination MAC"] = str(self.line_edit_destination_mac.text())
     eth_layer["Type"] = 8
     ip_layer = {}
     ip_layer["LayerType"] = "IP"
     ip_layer["Source Address"] = str(self.line_edit_source_ip.text())
     ip_layer["Destination Address"] = str(self.line_edit_destination_ip.text())
     ip_layer["TTL"] = self.spin_box_ttl.value()
     ip_layer["Version"] = 4
     transport_layer = {}
     if selected_transport_layer == 0:
         ip_layer["Protocol"] = 6
         transport_layer["LayerType"] = "TCP"
         transport_layer["Source port"] = self.spin_box_tcp_source_port.value()
         transport_layer["Destination port"] = self.spin_box_tcp_destination_port.value()
         transport_layer["Sequence"] = self.spin_box_tcp_sequence.value()
         transport_layer["Acknowledgement"] = self.spin_box_tcp_acknowledgement.value()
         transport_layer["Data"] = str(self.line_edit_tcp_data.text())
     elif selected_transport_layer == 1:
         ip_layer["Protocol"] = 1
         transport_layer["LayerType"] = "ICMP"
         transport_layer["Type"] = self.spin_box_icmp_type.value()
         transport_layer["Code"] = self.spin_box_icmp_code.value()
         transport_layer["Data"] = str(self.line_edit_icmp_data.text())
     else:
         ip_layer["Protocol"] = 17
         transport_layer["LayerType"] = "UDP"
         transport_layer["Source port"] = self.spin_box_udp_source_port.value()
         transport_layer["Destination port"] = self.spin_box_udp_destination_port.value()
         transport_layer["Data"] = str(self.line_edit_udp_data.text())
     packet.add_layer(eth_layer)
     packet.add_layer(ip_layer)
     packet.add_layer(transport_layer)
     return packet
Ejemplo n.º 2
0
    def parse(self):
        if self._file is None:
            print "Error : PcapReader : Open a file before using parse"
            return
        if self._packets:
            self._packets[:] = []

        # Parsing du fichier via dpkt
        pcap = dpkt.pcap.Reader(self._file)
        for ts, buf in pcap:
            # Parsing des donnees du paquet
            eth = dpkt.ethernet.Ethernet(buf)

            # On ne traite que les paquets IP
            if eth.type != dpkt.ethernet.ETH_TYPE_IP:
                continue

            packet = Packet(buf)
            # Recuperation des donnees de la couche ethernet
            eth_layer = {}
            eth_layer['LayerType'] = "Ethernet"
            # Un header ethernet fait 14 bytes (2 * 6 bytes d'addresses MAC  + l'ethertype ou la taille du payload (2 bytes))
            eth_layer['Header length'] = 14
            eth_layer['Type'] = socket.ntohs(eth.type)
            eth_layer['Destination MAC'] = network_utils.eth_addr(eth.dst)
            eth_layer['Source MAC'] = network_utils.eth_addr(eth.src)
            packet.add_layer(eth_layer)

            ip = eth.data

            ip_layer = {}
            # Recuperation des donnees de la couche ip
            ip_layer['LayerType'] = 'IP'
            ip_layer['Version'] = ip.v
            ip_layer['Header length'] = ip.hl
            ip_layer['TTL'] = ip.ttl
            ip_layer['Protocol'] = ip.p
            # on converti les adresses IP binaire en leur notation string
            ip_layer['Source Address'] = socket.inet_ntop(socket.AF_INET, ip.src)
            ip_layer['Destination Address'] = socket.inet_ntop(socket.AF_INET, ip.dst)
            # On rajoute la couche IP recuperee au paquet
            packet.add_layer(ip_layer)

            # TCP protocol
            if ip.p == dpkt.ip.IP_PROTO_TCP:
                tcp = ip.data
                # Recuperation des donnees de la couche TCP
                tcp_layer = {}
                tcp_layer['LayerType'] = 'TCP'
                tcp_layer['Source port'] = tcp.sport
                tcp_layer['Destination port'] = tcp.dport
                tcp_layer['Sequence'] = tcp.seq
                tcp_layer['Acknowledgement'] = tcp.ack
                tcp_layer['Header length'] = tcp.off
                tcp_layer['Data'] = tcp.data
                # On rajoute la couche TCP recuperee au paquet
                packet.add_layer(tcp_layer)
            # ICMP protocol
            elif ip.p == dpkt.ip.IP_PROTO_ICMP:
                icmp = ip.data
                # Recuperation des donnees de la couche ICMP
                icmp_layer = {}
                icmp_layer['LayerType'] = 'ICMP'
                icmp_layer['Type'] = icmp.type
                icmp_layer['Code'] = icmp.code
                icmp_layer['Checksum'] = icmp.sum
                icmp_layer['Data'] = icmp.data
                # On rajoute la couche ICMP recuperee au paquet
                packet.add_layer(icmp_layer)
            # UDP protocol
            elif ip.p == dpkt.ip.IP_PROTO_UDP:
                udp = ip.data
                # Recuperation des donnees de la couche UDP
                udp_layer = {}
                udp_layer['LayerType'] = 'UDP'
                udp_layer['Source port'] = udp.sport
                udp_layer['Destination port'] = udp.dport
                udp_layer['Length'] = udp.ulen
                udp_layer['Checksum'] = udp.sum
                udp_layer['Data'] = udp.data
                # On rajoute la couche UDP recuperee au paquet
                packet.add_layer(udp_layer)
            self._packets.append(packet)
        self.close_file()