やあみんな私はかなり拘束されています私はこの機能を持っています
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 の親として作成したことを示します。
私の問題は、コードを実行するたびに、送信される結果のパケットが不明 (0) になることです。これは、パケットが破損しているか、理解できないことを意味します。
私はこの問題にほぼ1週間悩まされており、送信するためにさまざまな方法を試しました. 何がバグなのかわかりません。eth の代わりに icmp を使用してパケットを送信すると、正常に動作します`