Como verificar se um daemon está escutando em qual interface?
Ex .: um sshd está configurado para ouvir apenas em wlan0. Tão. Além de verificar o sshd_config, como posso verificar se um daemon está ouvindo o que inerface? netstat pode fazer isso? quão? (SO: openwrt ou científico linux ou openbsd)
Eu pensei que o sshd poderia ser limitado a uma interface ... mas não ... (192.168.1.5 está no wlan0 ...)
(pode ser necessário instalar o pacote ipno openwrt (v12 / ajuste de atitude)
ifconfig / netstat etc. são considerados obsoletos , portanto você deve usar (como root)
para mostrar os soquetes TCP / UDP nos quais um programa em execução que contém a sequência sshdestá ouvindo
nenhuma porta para resolução de nomes
apenas tomadas de escuta
mostrar processos ouvindo
mostre soquetes do udp
mostre os soquetes do tcp
Então você cria uma lista como esta:
o interessante é a quinta coluna, que mostra uma combinação de endereço IP e porta:
escute na porta 22 em todos os endereços IPv4 disponíveis
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 )
escute no endereço IPv4 127.0.0.1 (localhost / loopback) e na porta 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.)
ou um endereço IP (para cobrir 2.)
(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.1ou qualquer outro endereço IP / IPv4
As linhas que começam com inete inet6mostram que esses IPs estão vinculados a essa interface, você pode ter muitas dessas linhas por interface:
e em um script:
(substitua "127.0.0.1")
você quer dizer que não há uma maneira exata de determinar se um daemon está escutando em qual interface, porque ele pode ser determinado apenas pelo endereço IP?
sim, correto. você (ou eu) poderia estender o script eu postei que faria as etapas antes de ...
E quanto a SO_BINDTODEVICE?
Usando lsof(como root):
iproute2também sspode fazer isso (como root):
... e finalmente netstat(como root):
Especificamente, *:sshou 0.0.0.0:22significa que está ouvindo na interface curinga (ou seja, todas elas). Algo como host-eth1:sshou 10.0.0.4:22dizer que está ouvindo em que a interface específica
espere um minuto .. Eu pensei que esta é a boa resposta: D, mas não, não há interface nele .. Como eu descobri que um programa está apenas ouvindo em uma determinada interface? ou não há solução para esta pergunta? : O
@gaskopeter Você pode ver a interface no endereço IP que é mostrado ( 192.168.1.5ou a.lanna sua pergunta). Se houver um *nesse local, ele *:sshouvirá em todas as interfaces ( na resposta do sr_).
@ Useless: Isso é verdade apenas em sistemas BSD.
@BatchyX Como assim? Eu posso ver o que o Useless diz sobre pelo menos o Arch Linux e o Debian.
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_BINDTODEVICEopçã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 lointerface.
Você ouviu direito: se você tiver duas interfaces (digamos eth0e eth1) com dois endereços IP diferentes (digamos 192.0.2.1 para eth0e 198.51.100.1 para eth1) 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 na eth1interface, 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) na eth1interface.
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.
Também com netstat, mas os argumentos específicos são:
você pode explicar a saída desse comando um pouco mais? : D
Honestamente, eu não sei. Eu precisaria 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.