Ich habe eine Frage zu einer sehr einfachen Sache in Perl, aber ich kann keine effiziente Lösung finden.Wie ändere ich die Ziel-MAC-Adresse in einem Paket?
Hier ist ein bisschen Kontext zuerst. Ich benutze Net::Pcap etc und wenn ich in meiner Funktion bin, die Pakete verarbeitet (verwendet von pcap_loop
) bekomme ich einen $packet
Skalar, der mein ganzes Paket enthält (Ethernet-Header + IP-Header + TCP/UDP-Header + Payload).
Was ich tun möchte, ist die ersten 6 Bytes dieses $packet
(Ethernet Ziel), um eine $packet
zu bekommen zu ändern, die ich sende pcap_sendpacket
verwenden können, ein benutzerdefiniertes Ziel-MAC-Adresse (zum Beispiel als eine bestandene Befehlszeilenargument oder so), wie 00:11:22:33:44:55
. So kann ich die benutzerdefinierte Adresse (unter Verwendung split
zum Beispiel) aufteilen, um alle 6 Teile der Ziel-MAC-Adresse zu erhalten, und sie mit der Funktion in Hex konvertieren, aber jetzt möchte ich die ersten Bytes meines Pakets ändern, um sie zu ersetzen mit diesen hex
ed Bytes. Wie soll ich vorgehen ?
Ich dachte mit einigen Verkettungen (.), Aber ich denke, dass diese Lösung schmutzig ist.
Denken in C (weil ich es in C vor einiger Zeit getan habe, aber ich möchte, dass dies in Perl getan wird), sobald ich meine "u_char packet[]
" bekam, musste ich nur eine memcpy
meiner Benutzer bereitgestellten Ethernet tun Adresse zu den ersten 6 Bytes meiner packet[]
und es hat funktioniert.
Sie können Pack auch verwenden, um Dinge in Bytes zu konvertieren. – Eric