(pode ser necessário instalar o pacote ip
no openwrt (v12 / ajuste de atitude)
ifconfig / netstat etc. são considerados obsoletos , portanto você deve usar (como root)
ss -nlput | grep sshd
para mostrar os soquetes TCP / UDP nos quais um programa em execução que contém a sequência sshd
está ouvindo
-n
nenhuma porta para resolução de nomes
-l
apenas tomadas de escuta
-p
mostrar processos ouvindo
-u
mostre soquetes do udp
-t
mostre os soquetes do tcp
Então você cria uma 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))
o interessante é a quinta coluna, que mostra uma combinação de endereço IP e porta:
*:22
escute na porta 22 em todos os endereços IPv4 disponíveis
:::22
ouça na porta 22 em todos os endereços IP disponíveis (não escrevo IPv6, pois o IP é IPv6 de acordo com a RFC 6540 )
127.0.0.1:6010
escute no endereço IPv4 127.0.0.1 (localhost / loopback) e na porta 6010
::1:6010
escute no endereço IP :: 1 (0: 0: 0: 0: 0: 0: 0: 1 em notação completa, também localhost / loopback) e porta 6010
Você deseja saber quais interfaces têm um endereço IPv4 (para cobrir 1.)
ip -4 a
# or "ip -4 address"
# or "ip -4 address show"
ou um endereço IP (para cobrir 2.)
ip -6 a
# or "ip -6 address
# or "ip -6 address show
(se você não adicionar a opção para IP ( -6
) ou IPv4 ( -4
), ambos serão mostrados)
Você também pode dar uma olhada na saída e procurar, por exemplo, 127.0.0.1
ou qualquer outro endereço 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
As linhas que começam com inet
e inet6
mostram que esses IPs estão vinculados a essa interface, você pode ter muitas dessas linhas por 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
e em um 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
(substitua "127.0.0.1")
Usando
lsof
(como root):iproute2
tambémss
pode fazer isso (como root):... e finalmente
netstat
(como root):fonte
*:ssh
ou0.0.0.0:22
significa que está ouvindo na interface curinga (ou seja, todas elas). Algo comohost-eth1:ssh
ou10.0.0.4:22
dizer que está ouvindo em que a interface específica192.168.1.5
oua.lan
na sua pergunta). Se houver um*
nesse local, ele*:ssh
ouvirá em todas as interfaces ( na resposta do sr_).Tanto quanto eu sei, você não pode (exceto nos sistemas BSD, onde a solução da Finkregh funciona bem). Pode ser possível, mas você não se importa, porque a maioria dos aplicativos escuta em todas as interfaces, mesmo quando vinculadas a um endereço IP.
No linux (e openwrt), a única maneira de um aplicativo ouvir apenas em uma determinada interface é a
SO_BINDTODEVICE
opção socket. Poucos aplicativos realmente suportam isso, pois são específicos do sistema operacional. Isso, ou eles usam soquete de pacote, mas isso é para protocolos de baixo nível (como servidores dhcp).No linux, que usa um modelo de host fraco, todos os aplicativos ouvem todas as interfaces por padrão, mesmo quando vinculam um soquete a um endereço IP. A única exceção é a ligação ao 127.0.0.1, que garante que o aplicativo ouça apenas na
lo
interface.Você ouviu direito: se você tiver duas interfaces (digamos
eth0
eeth1
) com dois endereços IP diferentes (digamos 192.0.2.1 paraeth0
e 198.51.100.1 paraeth1
) e você disser a um aplicativo que ligue 192.0.2.1, o aplicativo ainda escutará ambas as interfaces, mas responderão apenas se o IP de destino for 192.0.2.1. Portanto, alguém naeth1
interface, se sua tabela de roteamento estiver definida adequadamente, poderá acessar seu aplicativo acessando-o através do endereço 192.0.2.1 (mas não através de 198.51.100.1) naeth1
interface.Supondo que a ligação a um endereço IP seja a mesma que a ligação a uma interface de rede é totalmente falsa no Linux. Se isso lhe incomoda, use o roteamento de políticas e / ou
iptables
.fonte
Também com netstat, mas os argumentos específicos são:
fonte
man netstat
. A diferença que estou sugerindo está na alteração da "consulta" que você está executando para especificar explicitamente a interface que está interessada em verificar.netstat -i
irá listar interfaces, não ouvir portas, -1 para resposta, que não reflete a realidade