2014-01-23 6 views
11

Ich habe eine Frage bezüglich Tcp-Paket Sniffing mit Golang. Wir haben ein kleines Tool geschrieben, das alle eingehenden TCP-Pakete erfasst, die von einem Fiber-Tap kommen.Raw Socket Sniffing in Golang

Die aktuelle Implementierung verwendet einen libpcap-Wrapper unter Linux. Wir müssen dieses Tool auf Windows portieren. Natürlich ist das momentan nicht möglich.

Also meine Frage ist, gibt es eine Cross-Plattform-Lösung für das Schnüffeln von Paketen? Wir brauchen nur TCP-Pakete, IP-Header, keine Ethernet-Daten und nicht alle Funktionen von libpcap.

Wenn es keine plattformübergreifende Lösung gibt, wären zwei Code-Implementierungen ebenfalls in Ordnung. Ich weiß, dass man rohe Sockets unter Linux verwenden kann (und mit einigen Einschränkungen unter Windows). Unterstützt Golang rohe Sockets und gibt es eine Beispielimplementierung für das Sniffing von Paketen mit Sockets?

Tanks !! :-)

+0

"Die aktuelle Implementierung verwendet einen libpcap-Wrapper unter Linux. Wir müssen dieses Tool zu Windows portieren. Natürlich ist es im Moment nicht möglich." Vermutlich weil [WinPcap] (http://www.winpcap.org) aus irgendeinem Grund nicht funktioniert, oder? –

Antwort

7

Sie sollten die ipv4 package von go.net verwenden können.

Paket ipv4 implementiert IP-Level-Socket-Optionen für das Internet-Protokoll-Version 4.

Der ipv4.RawConn Typ und es ist assoziiert Methoden sollten plattformübergreifend arbeiten.

Ein RawConn stellt einen Paketnetzwerkendpunkt dar, der den IPv4-Transport verwendet. Es wird verwendet, um mehrere IP-Level-Socket-Optionen einschließlich der IPv4-Header-Manipulation zu steuern. Es bietet auch Datagramm-basierte Netzwerk-E/A-Methoden, die für die IPv4- und höheren Schichtprotokolle spezifisch sind, die IPv4-Datagramme direkt verarbeiten, wie OSPF, GRE.

Es gibt auch ein gleichwertiges Paket für ipv6.