嘿,伙计们,我很受束缚我有这个功能
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 发送数据包,它工作正常`