Eu sei que /dev/tcp/<host>/<port>
é um caminho mágico tratado especificamente por algumas conchas nos redirecionamentos. Mas de acordo com man bash
:
Se o sistema operacional no qual o bash estiver em execução fornecer esses arquivos especiais, o bash os utilizará; caso contrário, ele será copiado internamente [...]
Na caixa do Linux que estou usando agora, o /dev/tcp
arquivo especial não está presente; portanto, o Bash o emulará . Mas, na verdade, existe um sistema semelhante ao Unix que fornece ao /dev/tcp
arquivo especial a mesma semântica que a suportada pelo Bash?
devices
tcp
character-special-files
Sylvain Leroux
fonte
fonte
/dev
é um tmpfs nos linuxes atuais e estava na partição raiz nos mais antigos. É por isso que é impossível atualmente. Poderia ser possível facilmente com uma extensão sysfs ou procfs (ambos os fs são muito flexíveis e semelhantes (na verdade, provavelmente ninguém sabe por que eles não são os mesmos)), ninguém faz isso hoje, mas pode ser feito em cerca de 100 linhas de código.Respostas:
Eu acho que a documentação do Bash é um pouco enganadora sobre esse tópico. Observando o código, até voltando à versão 2.04, onde os redirecionamentos de rede foram introduzidos,
/dev/tcp
e/dev/udp
funciona da seguinte maneira:configure
script verifica se há suporte para vários recursos de rede; se assim for, se os redirecionamentos de rede estiverem ativados (que é o caso por padrão), o código de rede interno é incorporado;/dev/tcp
e/dev/udp
(no formato correto) for tratado internamente; caso contrário, um aviso será produzido (“/ dev / (tcp | udp) / host / porta não suportado sem rede”) e o Bash tenta abrir o caminho especificado no sistema;O que isso se resume é:
/dev/tcp
e/dev/udp
sempre será tratada internamente;/dev/(tcp|udp)/host/port
, isso será usado; caso contrário, com toda a probabilidade, o redirecionamento falhará;/dev/(tcp|udp)/host/port
, isso será usado; caso contrário, com toda a probabilidade, o redirecionamento falhará./dev/tcp
existe em alguns sistemas, mas até onde eu sei, nenhum suporta a mesma abstração que o Bash. No Solaris,/dev/tcp
é usado com andd
ferramenta para consultar e alterar a configuração da rede. No XTI (consulte também o Open Group, se você for um membro), at_open
função pode ser usada/dev/tcp
para abrir uma conexão TCP, mas não usa a configuração baseada em caminhos, existe uma estrutura de dados separada para especificar o host de destino e porta (e outros parâmetros).fonte