0

嘿,伙计们,我很受束缚我有这个功能

def send_ra_packet(self,source_link_layer, send_frequency,vlan_id = 0):
    ip = IP6.IP6()
    ip.set_source_address(self.get_source_address())
    ip.set_destination_address(self.get_target_address())
    ip.set_traffic_class(0)
    ip.set_flow_label(0)
    ip.set_hop_limit(64)
    s = socket.socket(socket.AF_INET6, socket.SOCK_RAW, socket.IPPROTO_ICMPV6)
    payload = self.create_ra_message(source_link_layer)
    print send_frequency

    for i in range(0, send_frequency):
        icmp = ICMP6.ICMP6()
        icmp.set_byte(0, 134) # Put Type?
        icmp.set_byte(1, 00)  # Put Code?
        payloadObject = ImpactPacket.Data()
        payloadObject.set_data(payload)
        icmp.contains(payloadObject)
        # Have the IP packet contain the ICMP packet (along with its payload).
        ip.contains(icmp)
        ip.set_next_header(ip.child().get_ip_protocol_number())
        ip.set_payload_length(ip.child().get_size())

        eth = ImpactPacket.Ethernet()
        vlan = ImpactPacket.EthernetTag()
        vlan.set_vid(1)
        eth.push_tag(vlan)
        icmp.calculate_checksum()
        eth.contains(ip)
        print icmp.get_packet()

        # Send it to the target host.
        s.sendto(eth.get_packet(), (self.get_target_address(), 0))
        print "Success Sending Packet - %d " % (i)

该功能的快速概述将告诉您我正在创建一个 RA 数据包并将其发送到我的网络中,我的问题是我似乎无法发送带有 VLAN 的 RA 数据包。

我的附加代码eth = ImpacketPacket.Ethernet() 将告诉您我创建了一个具有 VLAN 的标头,并将其作为具有实例 IPV6 的 ip 的父级。

我的问题是,当我运行代码时,将发送的结果数据包是 Uknown (0),这意味着它已损坏或无法理解。

我已经被这个问题困扰了将近一个星期,并尝试了很多方法来发送它。我不再确定什么是错误,如果我用 icmp 而不是 eth 发送数据包,它工作正常`

4

0 回答 0