Usando o (Admin) Powershell no Windows 11 Estou tentando usar o ncat.exe
(Versão 7.95) para enviar uma mensagem na porta UDP 28500 através da interface 192.168.200.5 para um dispositivo na rede 192.168.200.x.
Estou usando o comando
ncat.exe -u 192.168.200.5 28600
então eu digito o texto que quero enviar, como
EXAMPLE
e então recebo o erro
Ncat: An existing connection was forcibly closed by the remote host. .
Nenhum outro serviço parece estar sendo executado no Windows usando essa porta e ncat.exe
deve ser permitido através do firewall (público e privado).
O que mais posso tentar para consertar esse erro, pois parece que ncat.exe
não envia nada. Talvez haja uma ferramenta melhor?
Como você especificou seu próprio endereço IP como destino, você estava literalmente enviando o pacote para seu próprio sistema operacional na mesma máquina.
Não há uma interpretação especial para o endereço de 'destino' do soquete ser o mesmo do host de envio, pois isso seria ambíguo – há muitos casos em que se deseja apenas enviar os pacotes para o mesmo host ou para um destino arbitrário que "pode ou não ser" o mesmo host.
(Por outro lado, quando as rotas têm o mesmo endereço de host especificado como um 'gateway', isso não é ambíguo – a interpretação literal de "usar a si mesmo como gateway" seria absurda, o que cria espaço para o significado alternativo usual de "enviar através da interface que tem este endereço IP, sem nenhum gateway".)
Os pacotes de transmissão são implementados enviando explicitamente pacotes para o endereço de "transmissão", que está
255.255.255.255
(entre outros) no IPv4 eff02::1
no IPv6.No caso do IPv4, 255.255.255.255 usará qualquer interface para a qual a "rota padrão" leva, mas você pode, alternativamente, usar a sub-rede/interface específica
192.168.200.255
(supondo que sua rede seja /24 – máscaras de rede diferentes resultam em endereços de transmissão diferentes, mas é sempre o 'último' endereço de uma sub-rede) ou fazer com que o programa se vincule explicitamente a uma interface como uma operação SO_BINDTODEVICE separada antes de enviar pacotes (não sei se o ncat expõe essa opção).No caso do IPv6,
ff02::1
é um endereço de escopo de link, então a interface deve ser especificada como parte do endereço, por exemploff02::1%20
. O Linux aceita nomeadoff02::1%eth0
, o Windows requer o índice de interface numérico que você pode ver emroute print
ou em várias outras ferramentas.Pacotes multicast são implementados de forma similar, mas com endereços de "grupo" específicos, por exemplo, você pode enviar pacotes para
224.0.1.42
ouff02::abcd:123
(requer a mesma%index
especificação). Note que224.0.0.x
endereços são multicast apenas no nome, mas efetivamente transmitidos por especificação, como é o mencionado acimaff02::1
– embora eu ache que ainda há vantagens em protocolos existentes como mDNS usando grupos 224.0.0.x em vez de transmissão "real".Se você observar a captura do Wireshark (por exemplo, defina o filtro de captura como
multicast
), verá que a maioria dos pacotes de descoberta por IPv4 são enviados para255.255.255.255
transmissão (quando os desenvolvedores não se preocupam em desperdiçar a bateria dos dispositivos móveis) ou para um grupo multicast como224.0.0.251
/ff02::fb
(mDNS) ou239.255.255.250
/ff02::c
(UPnP/SSDP).