(puede que tenga que instalar el paquete ip
en openwrt (v12 / ajuste de actitud)
ifconfig / netstat, etc. se consideran obsoletos , por lo que debe usar (como root)
ss -nlput | grep sshd
para mostrar los sockets TCP / UDP en los que sshd
escucha un programa en ejecución que contiene la cadena
-n
sin puerto a nombre de resolución
-l
solo enchufes de escucha
-p
mostrar procesos de escucha
-u
mostrar tomas de udp
-t
muestre los enchufes del tcp
Luego obtienes una lista como esta:
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))
Lo interesante es la quinta columna que muestra una combinación de dirección IP y puerto:
*:22
escuche en el puerto 22 en cada dirección IPv4 disponible
:::22
escuche en el puerto 22 en cada dirección IP disponible (no escribo IPv6, ya que IP es IPv6 según RFC 6540 )
127.0.0.1:6010
escuche en la dirección IPv4 127.0.0.1 (localhost / loopback) y el puerto 6010
::1:6010
escuche en la dirección IP :: 1 (0: 0: 0: 0: 0: 0: 0: 1 en notación completa, también localhost / loopback) y puerto 6010
Luego desea saber qué interfaces tienen una dirección IPv4 (para cubrir 1.)
ip -4 a
# or "ip -4 address"
# or "ip -4 address show"
o una dirección IP (para cubrir 2.)
ip -6 a
# or "ip -6 address
# or "ip -6 address show
(si no agrega la opción para IP ( -6
) o IPv4 ( -4
), se muestran ambas)
También puede echar un vistazo a esa salida y buscar, por ejemplo, 127.0.0.1
o cualquier otra dirección 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
Las líneas que comienzan con inet
y inet6
muestran que estas IP están vinculadas a esta interfaz, puede tener muchas de estas líneas por interfaz:
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
y en un guión:
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
(reemplazar "127.0.0.1")
Usando
lsof
(como root):iproute2
'sss
puede hacer esto también (como root):... y finalmente,
netstat
(como root):fuente
*:ssh
o0.0.0.0:22
significa que está escuchando en la interfaz comodín (es decir, todos ellos). Algo comohost-eth1:ssh
o10.0.0.4:22
significa que está escuchando en esa interfaz específica192.168.1.5
oa.lan
en su pregunta). Si hay un*
en este lugar, entonces escucha en todas las interfaces (*:ssh
en la respuesta de sr_).Hasta donde sé, no puedes (excepto en los sistemas BSD, donde la solución de Finkregh funciona bien). Puede ser posible, pero no le importa, porque la mayoría de las aplicaciones escuchan en todas las interfaces, incluso cuando están vinculadas a una dirección IP.
En linux (y openwrt), la única forma de que una aplicación escuche solo en una determinada interfaz es la
SO_BINDTODEVICE
opción de socket. Pocas aplicaciones realmente admiten esto, ya que es específico del sistema operativo. Eso, o usan paquetes de socket, pero eso es para protocolos de bajo nivel (como servidores dhcp).En Linux, que utiliza un modelo de host débil, cada aplicación escucha en todas las interfaces de forma predeterminada, incluso cuando vincula un socket a una dirección IP. La única excepción es cuando se vincula a 127.0.0.1, lo que garantiza que la aplicación solo escuche en la
lo
interfaz.Lo escuchó bien: si tiene dos interfaces (digamos
eth0
yeth1
) con dos direcciones IP diferentes (digamos 192.0.2.1 paraeth0
y 198.51.100.1 paraeth1
) y le dice a una aplicación que se una a 192.0.2.1, la aplicación seguirá escuchando ambas interfaces, pero solo responderán si la IP de destino es 192.0.2.1. Entonces, alguien en laeth1
interfaz, si su tabla de enrutamiento está adecuadamente definida, puede acceder a su aplicación accediendo a ella a través de la dirección 192.0.2.1 (pero no a través de 198.51.100.1) en laeth1
interfaz.Asumir que vincular a una dirección IP es lo mismo que vincular a una interfaz de red es completamente falso en Linux. Si eso le molesta, use la política de enrutamiento y / o
iptables
.fuente
También con netstat pero los argumentos específicos son:
fuente
man netstat
. La diferencia que sugiero es cambiar la "consulta" que está ejecutando para especificar explícitamente la interfaz que le interesa verificar.netstat -i
enumerará interfaces, no puertos de escucha, -1 para respuestas que no reflejan la realidad