Não, o arquivo hosts é simplesmente uma maneira de resolver nomes estaticamente quando nenhum servidor DNS está presente.
Eu quero enganar o meu navegador para ir ao localhost: 3000 em vez de xyz.com. Fui ao / etc / hosts no OS X 10.5 e adicionei a seguinte entrada:
127.0.0.1:3000 xyz.com
Isso não funciona, mas sem especificar a porta, o truque funciona. Existe uma maneira de fazer isso especificando a porta?
O arquivo de hosts é para resolução de DNS. O DNS resolve nomes para endereços IP e não tem nada a ver com portas, receio. Você precisará usar outra coisa em conjunto com o arquivo hosts para redirecionar a porta (Mangle o cabeçalho TCP alterando a porta de destino).
Com o iptables:
O MAC OS usa o iptables / netfilter (não achei que fosse) ..?
Se o OS X usa o iptables você pode apontar o xyz.com para algum ip no arquivo hosts como 157.166.226.25 e então:
sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -d 157.166.226.25 -j DNAT --to-destination 127.0.0.1:3000
: -)
Você não precisa especificar uma porta no arquivo de hosts. Basta fazer a entrada como você omitindo a porta, como em 127.0.0.1 xyz.com, isso irá direcioná-lo para o seu host local, em seguida, basta adicionar a porta 3000 para o final do seu URL ... link
Supondo que você está tentando interceptar http e não https, você deve estar ouvindo na porta 80 em sua máquina local, mas você pode usar os recursos de encaminhamento de porta do ssh ao ssh'ing para localhost com -L80:localhost:3000
, mas você terá que fazer isso como root.
Provavelmente seria melhor ter o que está sendo executado na porta 3000 apenas escutar a porta 80.
Se você controlar o roteador entre você e xyz.com, poderá configurar uma regra de encaminhamento de porta.
Eu acho que você precisa usar algum tipo de servidor proxy ou talvez algo com software de firewall para redirecionar as conexões de porta ...
A Chief-AG está certa em que o arquivo hosts é usado para resolver nomes estaticamente (a presença do DNS é irrelevante). No entanto, pode haver uma combinação de coisas que você poderia fazer.
Parece ser um bom bocado de trabalho, mas iria conseguir o que você está perguntando.
A solução DNS para isso é usar registros SRV:
Esta é uma forma de permitir que o DNS, que originalmente era um banco de dados distribuído "nome para número" ou "número para nome", inclua "nome para terminal de serviço", que poderia (opcionalmente) incluir um protocolo e uma porta.
A má notícia é que os aplicativos precisam ser desenvolvidos para usar registros SRV, portanto, não é uma solução para o que você está tentando fazer.
Como uma alternativa aos hosts virtuais de; você poderia criar um túnel ssh escutando na porta 80 e encaminhando para localhost: 3000.
Eu estou supondo que isso seja para desenvolvimento de trilhos? Nesse caso, execute script / server -p 80 para executá-lo na porta padrão da web. então seu xyz.com funcionará
Se você estiver usando o Apache como um servidor web em xyz.com, você pode usar o % co_de do Apache. % para "converter" para uma porta diferente.