(vous devrez peut-être installer le package ip
sur openwrt (v12 / ajustement d'attitude)
ifconfig / netstat etc. sont considérés comme obsolètes , vous devez donc utiliser (en tant que root)
ss -nlput | grep sshd
pour afficher les sockets TCP / UDP sur lesquels un programme en cours d'exécution qui contient la chaîne sshd
écoute
-n
pas de port pour nommer la résolution
-l
prises d'écoute uniquement
-p
montrer l'écoute des processus
-u
afficher les sockets udp
-t
afficher les sockets tcp
Ensuite, vous avez créé une liste comme celle-ci:
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))
la chose intéressante est la 5ème colonne qui montre une combinaison d'adresse IP et de port:
*:22
écouter sur le port 22 sur chaque adresse IPv4 disponible
:::22
écouter sur le port 22 sur chaque adresse IP disponible (je n'écris pas IPv6, car IP est IPv6 selon RFC 6540 )
127.0.0.1:6010
écouter sur l'adresse IPv4 127.0.0.1 (localhost / loopback) et le port 6010
::1:6010
écouter sur l'adresse IP :: 1 (0: 0: 0: 0: 0: 0: 0: 1 en notation complète, également localhost / loopback) et le port 6010
Vous voulez ensuite savoir quelles interfaces ont une adresse IPv4 (pour couvrir 1.)
ip -4 a
# or "ip -4 address"
# or "ip -4 address show"
ou une adresse IP (pour couvrir 2.)
ip -6 a
# or "ip -6 address
# or "ip -6 address show
(si vous n'ajoutez pas l'option pour IP ( -6
) ou IPv4 ( -4
), les deux sont affichés)
Vous pouvez également avoir un look qui affiche et recherche par exemple 127.0.0.1
ou toute autre adresse IP / IPv4
# 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
Les lignes commençant par inet
et inet6
montrant que ces IP sont liées à cette interface, vous pouvez avoir plusieurs de ces lignes par interface:
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
et dans un script:
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
(remplacer "127.0.0.1")
Utilisation
lsof
(en tant que root):iproute2
« sss
peuvent faire cela aussi ( en tant que root):... et enfin,
netstat
(en tant que root):la source
*:ssh
ou0.0.0.0:22
signifie qu'il écoute sur l'interface générique (c'est-à-dire tous). Quelque chose commehost-eth1:ssh
ou10.0.0.4:22
signifie qu'il écoute sur cette interface spécifique192.168.1.5
oua.lan
dans votre question). S'il y en a un*
à cet endroit, alors il écoute sur toutes les interfaces (*:ssh
dans la réponse de sr_).Pour autant que je sache, vous ne pouvez pas (sauf sur les systèmes BSD, où la solution de Finkregh fonctionne bien). Cela peut être possible, mais peu vous importe, car la plupart des applications écoutent sur chaque interface, même lorsqu'elles sont liées à une adresse IP.
Sous linux (et openwrt), la seule façon pour une application d'écouter uniquement sur une certaine interface est l'
SO_BINDTODEVICE
option socket. Peu d'applications le prennent en charge, car il est spécifique au système d'exploitation. Cela, ou ils utilisent un socket de paquet, mais c'est pour les protocoles de bas niveau (comme les serveurs DHCP).Sous Linux, qui utilise un modèle d'hôte faible, chaque application écoute par défaut sur toutes les interfaces, même lors de la liaison d'un socket à une adresse IP. La seule exception est lors de la liaison à 127.0.0.1, ce qui garantit que l'application écoute uniquement sur l'
lo
interface.Vous l'avez bien entendu: si vous avez deux interfaces (disons
eth0
eteth1
) avec deux adresses IP différentes, (disons 192.0.2.1 poureth0
et 198.51.100.1 poureth1
) et que vous dites à une application de se lier sur 192.0.2.1, l'application continuera à écouter les deux interfaces, mais ne répondra que si l'adresse IP de destination est 192.0.2.1. Ainsi, quelqu'un sur l'eth1
interface, si sa table de routage est correctement définie, peut accéder à votre application en y accédant via l'adresse 192.0.2.1 (mais pas via 198.51.100.1) sur l'eth1
interface.Supposer que la liaison à une adresse IP est identique à la liaison à une interface réseau est totalement faux sous Linux. Si cela vous dérange, utilisez le routage de stratégie et / ou
iptables
.la source
Aussi avec netstat mais les arguments spécifiques sont:
la source
man netstat
. La différence que je suggère est de changer la "requête" que vous exécutez pour spécifier explicitement l'interface que vous souhaitez vérifier.netstat -i
listera les interfaces, pas les ports d'écoute, -1 pour une réponse qui ne reflète pas la réalité