Ich erstelle ein Skript und muss feststellen, durch welche Schnittstelle der Datenverkehr einer IP-Adresse geht. Dies liegt daran, dass in Arch eine IP-Adresse nur für eine von vier Netzwerkkarten verwendet wird, aber jede dieser vier sein kann.
Ich habe es manuell so gemacht, dass ich einen TCPdump ausgeführt habe: Wenn ich Pakete sehe, ist dies die Schnittstelle. Wenn nicht, breche ich den TCPdump ab und führe einen weiteren TCPdump auf einer anderen Schnittstelle aus.
Ich verwende FreeBSD.
Antwort1
Anrufroute get
.
route get 192.0.2.42 | awk '$1 ~ /interface/ {print $2}'
Antwort2
netstat -tau
zeigt Ihnen die lokale Adresse und den Port, die von einem Programm verwendet werden. Jede Schnittstelle hat ihre eigene Adresse, außer in Fällen wie Bonding... Ist das die Information, die Sie brauchen?
Wenn dies der Fall ist, können Sie die Ausgabe ganz einfach grep
in cut
einem Skript verwenden.
Beispiel:
netstat -taunpe | grep firefox | awk '{print $4}' | cut -d ':' -f 1
Ruft die lokale Adresse ab, die von den von „Firefox“ hergestellten Verbindungen verwendet wird.
Antwort3
Bei *BSDs bin ich mir nicht sicher, aber unter Linux route -n
werden Ihnen (neben anderen Dingen) Flags (Sie möchten wahrscheinlich nach der Zeile suchen, die als Standardroute markiert ist) und der Gerätename angezeigt:
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.100.63.254 0.0.0.0 UG 0 0 0 eth0
10.100.0.0 0.0.0.0 255.255.192.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
oder:
$ ip route
default via 10.100.63.254 dev eth0
10.100.0.0/18 dev eth0 proto kernel scope link src 10.100.12.38
127.0.0.0/8 dev lo scope link
169.254.0.0/16 dev eth0 scope link