Ethernet-Paket mit Raw Socket versenden (C/C++)
-
Hallo.
Zu dem oben genannten Thema habe ich jetzt schon fast den ganzen Tag gegooglet, schon diverse Anleitungen und Codebeispiele gefunden, die bis jetzt aber noch nciht mal funtioniert haben.
Also ich möchte auf Linux (Ubuntu 12.04) Ethernet-Paket versenden.
Ich habe nicht vor, eine TCP oder UDP Verbindung aufzubauen, es geht mir um den Ethernet-Frame.Soweit ich weiß, kann man dazu Raw Sockets verwenden, wie genau ist mir aber noch nicht klar.
Wäre nett, wenn jemand da einen Link hätte.Freundliche Grüße, Tim
-
Erster Treffer bei Google:
http://aschauf.landshut.org/fh/linux/udp_vs_raw/ch01s03.html
Zweiter Treffer bei Google:
Schaut doch recht sinnvoll aus, auch mit Codebeispielen.
-
schon diverse Anleitungen und Codebeispiele gefunden, die bis jetzt aber noch nciht mal funtioniert haben.
Dann machst du was falsch.
wie genau ist mir aber noch nicht klar
Steht in den Anleitungen.
-
Also den Code aus dem ersten Link gibt schon beim erstellen des Sockets einen Fehler.
War mir nicht sicher, ob es am Code liegen könnte und hab deshalb weiter gesucht.
Vielleicht habt ihr ja da ne Idee, wieso der Socket nicht geöffnet werden kann?Und aus den z.t. sehr dürftigen Code-Kommentaren wird man auch nicht sehr schlau, zugegeben den 2ten Link kenn ich noch nciht..
Fg und danke schonmal für die Hilfe
-
Was sagt errno bzw. perror? Mein Tipp: Du bist nicht root.
-
@Bashar: Ich glaub errno kann ich mir erstmal sparen, root war schonmal richtig...
Allerdings hänge ich jetzt an der index number für das network interface.
Auf http://www.microhowto.info/howto/get_the_index_number_of_a_linux_network_interface_in_c_using_siocgifindex taucht zu dessen Beschaffung der Bezeichner "if_name" auf, der dem Compiler nicht bekannt ist.In der Anleitung http://www.microhowto.info/howto/send_an_arbitrary_ethernet_frame_using_an_af_packet_socket_in_c.html wird als Nummer einfach 2 eingesetzt.
Wieso ist der if_name nicht bekannt, hab ich ne Programmzeile überlesen oder ist er in einem zusätzlichen Header definiert?
-
tim schrieb:
taucht zu dessen Beschaffung der Bezeichner "if_name" auf, der dem Compiler nicht bekannt ist.
Das ist eine Variable. Musst selber angeben.