(Möglicherweise müssen Sie das Paket ip
auf openwrt installieren (v12 / Einstellungskorrektur)
ifconfig / netstat usw. gelten als veraltet , daher sollten Sie (als root)
ss -nlput | grep sshd
die TCP / UDP - Sockets , auf dem ein laufendes Programm zu zeigen , die die Zeichenfolge enthält sshd
hört
-n
Kein Port zur Namensauflösung
-l
nur hörbuchsen
-p
Show Prozesse hören
-u
udp sockets anzeigen
-t
TCP-Sockets anzeigen
Dann geht dir eine Liste wie diese:
tcp LISTEN 0 128 *:22 *:* users:(("sshd",3907,4))
tcp LISTEN 0 128 :::22 :::* users:(("sshd",3907,3))
tcp LISTEN 0 128 127.0.0.1:6010 *:* users:(("sshd",4818,9))
tcp LISTEN 0 128 ::1:6010 :::* users:(("sshd",4818,8))
Das Interessante ist die 5. Spalte, die eine Kombination aus IP-Adresse und Port anzeigt:
*:22
lauschen Sie an Port 22 auf jede verfügbare IPv4-Adresse
:::22
lauschen Sie auf Port 22 auf jede verfügbare IP-Adresse (ich schreibe kein IPv6, da IPv6 gemäß RFC 6540 ist )
127.0.0.1:6010
Lauschen Sie der IPv4-Adresse 127.0.0.1 (localhost / loopback) und dem Port 6010
::1:6010
empfange die IP-Adresse :: 1 (0: 0: 0: 0: 0: 0: 0: 1 in voller Notation, auch localhost / loopback) und Port 6010
Sie möchten dann wissen, welche Schnittstellen eine IPv4-Adresse haben (siehe 1.).
ip -4 a
# or "ip -4 address"
# or "ip -4 address show"
oder eine IP-Adresse (für 2.)
ip -6 a
# or "ip -6 address
# or "ip -6 address show
(Wenn Sie die Option für IP ( -6
) oder IPv4 ( -4
) nicht hinzufügen, werden beide angezeigt)
Sie können auch nach einer 127.0.0.1
anderen IP / IPv4-Adresse suchen
# here a demo where i show all addresses of the device "lo" (loopback)
ip a show dev lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
Die Zeilen, die mit inet
und beginnen, inet6
zeigen, dass diese IPs an diese Schnittstelle gebunden sind. Pro Schnittstelle sind möglicherweise viele der folgenden Zeilen vorhanden:
he-ipv6: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN
link/sit 192.0.2.1 peer 192.0.2.3
inet6 2001:db8:12::1/64 scope global
valid_lft forever preferred_lft forever
inet6 2001:db8::2/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::1111:1111/128 scope link
valid_lft forever preferred_lft forever
und in einem Skript:
address="127.0.0.1"
for i in $(grep ':' /proc/net/dev | cut -d ':' -f 1 | tr -d ' ') ; do
if $(ip address show dev $i | grep -q "${address}") ; then
echo "${address} found on interface ${i}"
fi
done
(ersetzen Sie "127.0.0.1")
Verwenden
lsof
(als root):iproute2
Dasss
können wir auch (als root):... und zum Schluss
netstat
(als root):quelle
*:ssh
oder0.0.0.0:22
bedeutet, dass die Platzhalter-Schnittstelle abgehört wird (dh alle von ihnen). So etwas wiehost-eth1:ssh
oder so etwas10.0.0.4:22
bedeutet, dass es auf dieser spezifischen Schnittstelle lauscht192.168.1.5
oder anhanda.lan
Ihrer Frage) sehen. Wenn es*
an dieser Stelle eine gibt, lauscht sie auf allen Schnittstellen (*:ssh
in der Antwort von sr_).Soweit ich weiß, können Sie das nicht (außer auf BSD-Systemen, auf denen Finkreghs Lösung gut funktioniert). Es ist möglich, aber es ist Ihnen egal, da die meisten Anwendungen auf jeder Schnittstelle empfangsbereit sind, auch wenn sie an eine IP-Adresse gebunden sind.
Unter Linux (und openwrt) ist die einzige Möglichkeit für eine Anwendung, nur auf einer bestimmten Schnittstelle zu lauschen, die
SO_BINDTODEVICE
Socket-Option. Nur wenige Anwendungen unterstützen dies tatsächlich, da es betriebssystemspezifisch ist. Das, oder sie verwenden Packet Socket, aber das ist für Low-Level-Protokolle (wie DHCP-Server).Unter Linux, das ein schwaches Hostmodell verwendet, überwacht jede Anwendung standardmäßig alle Schnittstellen, auch wenn ein Socket an eine IP-Adresse gebunden wird. Die einzige Ausnahme besteht beim Binden an 127.0.0.1, wodurch sichergestellt wird, dass die Anwendung nur auf der
lo
Schnittstelle lauscht .Sie haben es richtig gehört: Wenn Sie zwei Schnittstellen (z. B.
eth0
undeth1
) mit zwei verschiedenen IP-Adressen (z. B. 192.0.2.1 füreth0
und 198.51.100.1 füreth1
) haben und Sie einer Anwendung anweisen , 192.0.2.1 zu binden, hört die Anwendung weiterhin zu beide Schnittstellen, reagieren aber nur, wenn die Ziel-IP 192.0.2.1 lautet.eth1
Wenn die Routing-Tabelle der Schnittstelle entsprechend definiert ist, kann eine andere Person auf Ihre Anwendung zugreifen, indem sie über die Adresse 192.0.2.1 (jedoch nicht über 198.51.100.1) auf dereth1
Schnittstelle darauf zugreift .Angenommen, die Bindung an eine IP-Adresse entspricht der Bindung an eine Netzwerkschnittstelle, ist dies unter Linux völlig falsch. Wenn Sie das stört, verwenden Sie Richtlinienrouting und / oder
iptables
.quelle
Auch bei netstat sind aber die konkreten Argumente:
quelle
man netstat
. Der Unterschied, den ich vorschlage, besteht darin, die "Abfrage", die Sie ausführen, zu ändern, um explizit die Schnittstelle anzugeben, die Sie überprüfen möchten.netstat -i
listet Schnittstellen, nicht lauschende Ports, -1 für eine Antwort, die nicht die Realität widerspiegelt