Esempio n. 1
0
def foo(in_filename, out_filename):
    # open the input file for reading
    f = PcapReader(in_filename)
    # open the output file for writing
    o = PcapWriter(out_filename)

    # read the first packet from the input file
    p = f.read_packet()

    # while we haven't processed the last packet
    while p:
        layer = p.firstlayer()
        while not isinstance(layer, NoPayload):
            if (type(layer) is IPv6):
                new_layer = IP()
                del new_layer.ihl
                new_layer.ttl = layer.hlim
                new_layer.proto = layer.nh
                new_layer.src = ".".join(map(str, six2four(layer.src)))
                new_layer.dst = ".".join(map(str, six2four(layer.dst)))
                new_layer.add_payload(layer.payload)
                prev_layer = layer.underlayer
                del layer
                prev_layer.remove_payload()
                prev_layer.add_payload(new_layer)
                if type(prev_layer) is Ether:
                    prev_layer.type = ETH_P_IP
                layer = new_layer

            if layer.default_fields.has_key('chksum'):
                del layer.chksum
            if layer.default_fields.has_key('len'):
                del layer.len

            # advance to the next layer
            layer = layer.payload

        # write the packet we just dissected into the output file
        o.write(p)
        # read the next packet
        p = f.read_packet()

    # close the input file
    f.close()
    # close the output file
    o.close()
Esempio n. 2
0
# Construct UDP header
udp = UDP(sport=7070, dport=9090, chksum=0)
udp.len = 200  # This should be the combined length of all fragments
# Construct payload
payload = "A" * 72  # Put 80 bytes in the first fragment   (72 byte from payload + 8byte udp header)

# Construct the entire packet and send it out
pkt = ip / udp / payload  # For other fragments, we should use ip/payload
send(pkt, verbose=0)
pkt.show()
#----------------------second fragment---------------------

print(
    "----------------------------------second fragment---------------------------------"
)
ip.proto = 17
payload2 = "B" * 80  # 80 / 8
ip.frag = 10
pkt2 = ip / payload2
send(pkt2, verbose=0)
pkt2.show()
#----------------------third fragment---------------------
print(
    "----------------------------------Third fragment---------------------------------"
)
payload3 = "C" * 40
ip.frag = 20
ip.flags = 0
pkt3 = ip / payload3
send(pkt3, verbose=0)
pkt3.show()
    if j != 0:
        packet_ihl = IP(dst=list_of_network_addresses[j]) / TCP(dport=22)
        packet_tos = IP(dst=list_of_network_addresses[j]) / TCP(dport=22)
        packet_len = IP(dst=list_of_network_addresses[j]) / TCP(dport=22)
        packet_id = IP(dst=list_of_network_addresses[j]) / TCP(dport=22)
        packet_frag = IP(dst=list_of_network_addresses[j]) / TCP(dport=22)
        packet_ttl = IP(dst=list_of_network_addresses[j]) / TCP(dport=22)
        packet_proto = IP(dst=list_of_network_addresses[j]) / TCP(dport=22)

        packet_ihl.ihl = 18
        packet_tos.tos = 18
        packet_len.len = 18
        packet_id.id = 18
        packet_frag.frag = 18
        packet_ttl.ttl = 18
        packet_proto.proto = 18

        answer_ihl = sr(packet_ihl, timeout=4)
        answer_tos = sr(packet_tos, timeout=4)
        answer_len = sr(packet_len, timeout=4)
        answer_id = sr(packet_id, timeout=4)
        answer_frag = sr(packet_frag, timeout=4)
        answer_ttl = sr(packet_ttl, timeout=4)
        answer_proto = sr(packet_proto, timeout=4)

        if len(answer_ihl[0]) != 0:
            if len(
                    nx.dijkstra_path(graph_ihl, list_of_network_addresses[0],
                                     list_of_network_addresses[j])) == 2:
                graph_ihl.add_edge(str(list_of_network_addresses[0]),
                                   str(list_of_network_addresses[j]),
Esempio n. 4
0
 def getIPPacket(self):
     """
     构造IP数据包
     :return:
     """
     # chksum = self.entries[9].get()
     try:
         eth = Ether()
         eth.src = self.entries[0].get()
         eth.dst = self.entries[1].get()
         eth.type = int(self.entries[2].get())
         ip_packet = IP()
         ip_packet.versionion = int(self.entries[3].get())
         ip_packet.ihl = int(self.entries[4].get())
         ip_packet.tos = int(self.entries[5].get())
         ip_packet.len = int(self.entries[6].get())
         ip_packet.id = int(self.entries[7].get())
         ip_packet.flags = int(self.entries[8].get())
         ip_packet.frag = int(self.entries[9].get())
         ip_packet.ttl = int(self.entries[10].get())
         ip_packet.proto = int(self.entries[11].get())
         payload = self.entries[16].get()
         ip_packet.src = self.entries[13].get()
         ip_packet.dst = self.entries[14].get()
         # 不含payload计算首部校验和
         if payload == '':
             print("无payload的IP报文")
             ip_packet.show()
             checksum_scapy = IP(raw(ip_packet)).chksum
             # 自主计算验证IP首部检验和并进行填充
             print("scapy自动计算的IP首部检验和是:%04x (%s)" %
                   (checksum_scapy, str(checksum_scapy)))
             # 1.将IP首部和自动设置为0
             ip_packet.chksum = 0
             # 2.生成ip首部的数据字符串
             x = raw(ip_packet)
             ipString = "".join("%02x" % orb(x) for x in x)
             # 3.将ip首部的数据字符串转换成字节数组
             ipbytes = bytearray.fromhex(ipString)
             # 4.调用校验和计算函数计算校验和
             checksum_self = self.IP_headchecksum(ipbytes)
             # 5.进行校验和验证
             print("验证计算IP首部的检验和是:%04x (%s)" %
                   (checksum_self, str(checksum_self)))
         # 含payload计算首部校验和
         else:
             print("含有payload的IP报文")
             ip_packet = ip_packet / payload
             ip_packet.show()
             ip_packet.len = 20 + len(payload)
             checksum_scapy = IP(raw(ip_packet)).chksum
             print("scapy自动计算的IP首部检验和是:%04x (%s)" %
                   (checksum_scapy, str(checksum_scapy)))
             ip_packet.chksum = 0
             ip_packet.ihl = 5
             print('\n 报文长度是:%s' % str(ip_packet.len))
             x = raw(ip_packet)
             ipString = "".join("%02x" % orb(x) for x in x)
             ipbytes = bytearray.fromhex(ipString)
             checksum_self = self.IP_headchecksum(ipbytes[0:ip_packet.ihl *
                                                          4])
             print("验证计算IP首部的检验和是:%04x (%s)" %
                   (checksum_self, str(checksum_self)))
         if checksum_self == checksum_scapy:
             print("检验和正确")
         else:
             print("检验和不正确")
         ip_packet.chksum = checksum_self
         self.entries[12].delete(0, END)
         self.entries[12].insert(0, hex(ip_packet.chksum))
         ip_packet.show()
         self.resultText.insert('end', ip_packet.summary() + '\n')
         self.resultText.insert('end', str(ip_packet) + '\n')
         return eth / ip_packet
     except Exception as e:
         print(e.with_traceback())
     finally:
         pass