Das Senden eines rohen tcp-Pakets mit dem syn-Flag set geht einfach durch die lo-Schnittstelle, nicht durch eth0, wie ich es möchte

8

Ich möchte ein syn-Paket an meinen httpd-Server senden und ein antwortendes syn-ack-Paket erhalten. Aber wenn ich mit Wireshark überwache, wird das Paket von meiner lokalen Schnittstelle gesendet, lo und nicht eth0 .

Ich habe versucht, einige verschiedene Werte in setsockopt zu setzen, wie Sie im folgenden Code sehen können, aber keiner scheint zu funktionieren, es benutzt immer die lo Schnittstelle und nicht eth0 . Ich weiß nicht, ob es im tcp-Paket etwas falsch ist, das es durch die lokale Schnittstelle laufen lässt, oder ob es etwas anderes ist.

%Vor%

Meine Schnittstellen:

%Vor%

BEARBEITEN

%Vor%

Aber es geht immer noch durch lo interface. Ist es etwas mit der überbrückten Netzwerkschnittstelle in meiner virtuellen Maschine?

BEARBEITEN 2

Ich habe jetzt meine rohen ip-Pakete mit denen verglichen, die hping2 sendet, und die einzige Sache, die sich unterscheidet, ist die Schnittstellen-ID (spezifiziert im Rahmen) und dass die Ethernet-Schicht keine MAC-Adressinformation enthält. hping2 sendet über die eth0 -Schnittstelle und enthält alle MAC-Adressinformationen. Mein Programm sendet es durch lo und enthält keine MAC-Informationen ( vielleicht wird es durch lo interface gesendet, weil es keine MAC-Adresse Informationen in dem Paket enthält ). Guck auf dieses Bild:

Ich habe auch den Quellcode von hping2 mit meinem Code verglichen, um ein rohe IP-Paket zu erstellen, und ich kann nichts sehen, was dazu führen würde, dass die Pakete wie in meinem Fall die Schnittstelle lo durchlaufen. Und ich habe überhaupt keine Ahnung, warum das Programm meines hecks keine MAC-Adressen in meinen Paketen enthält. Alles andere in meinem Paket ist gleich dem Inhalt in den hping2-Paketen, außer der Sequenznummer, die zufällig ist.

Irgendwelche anderen Ideen?

    
Rox 31.12.2013, 10:10
quelle

2 Antworten

4

Ich habe es selbst gelöst. Es war die sin.sin_addr.s_addr , die auf die IP des Absenders zeigte, aber es mussten die Server ip sein! Seien Sie vorsichtig, weil solche Fehler im Code nicht immer einfach zu erkennen sind! :-)

Jetzt enthalten die Pakete korrekte MAC-Informationen.

Das nächste Problem ist, warum ich keine syn-acks vom Server bekomme, aber ich werde eine neue Frage für dieses Problem stellen.

    
Rox 03.01.2014, 00:39
quelle
3

Um eine bestimmte Netzwerkschnittstelle (unter Linux) für den Egress-Verkehr auszuwählen, können Sie Folgendes verwenden:

%Vor%

Links mit Beispielcode-Snippet

Weitere Informationen

rakeshdn 31.12.2013 11:42
quelle