Faça com que o aplicativo ouça os hosts em um gateway diferente

0

Estrutura de rede

Uma rede universitária típica. Hostels diferentes conectados através da LAN. Todos os hosts em um albergue usam o mesmo gateway. Eu posso me comunicar diretamente com hosts em outros albergues usando seu ip exclusivo.

Minha consulta

Eu corro o Dota / Warcraft no Linux através do Wine. Para jogos em LAN, o Warcraft detecta automaticamente servidores criados por hosts usando o mesmo gateway (no meu caso, criado por hosts no meu albergue). Para outros, existe uma ferramenta chamada BattleLan , onde é possível adicionar o ip que hospeda o servidor e ativar para aparecer em Warcraft normalmente. Infelizmente, esta ferramenta não funciona através do vinho. No entanto, o conceito parece simples para mim e acredito que pode ser facilmente implementado. Eu só preciso fazer esse aplicativo ouvir a porta 6112 de algum ip (certo?). Alguma ajuda / leva?

    
por nims 26.03.2013 / 10:49

1 resposta

1

Em primeiro lugar, você não está se comunicando diretamente com hosts em outros albergues, é através de pelo menos um gateway, mais provavelmente dois: o seu e o deles. Os gateways marcam as extremidades de seus domínios de broadcast, o que efetivamente significa que as transmissões não serão transmitidas além de um gateway. No entanto, jogos, especialmente os Warcrafts usam transmissões para anunciar servidores. É por isso que você não vê os servidores criados por hosts em outros albergues; porque você não está recebendo as transmissões deles.

Curiosamente, eu mesmo não joguei esse problema, mas é isso que eu posso imaginar e tentarei:

Do fato de que há algo como o BattleLan que resolve o problema, eu acho que as mensagens de broadcast incluem informações do formulário "Há um jogo aberto de e". Uma vez que o seu cliente de jogo recebeu essa transmissão, ele contata o servidor para todo o resto.

Para validar, você pode usar ferramentas como wireshark ou tcpdump , fazê-las ouvir em sua placa de rede local para tráfego de broadcast e abrir um jogo de Warcraft. Os programas capturarão e exibirão as transmissões. Provavelmente, os pacotes são endereçados para 255.255.255.255 ou o hightes IP da sua sub-rede, provavelmente ainda terminando com 255. O pacote IP deve conter um UDP segmemt, não TCP, mas ainda pode ser endereçado à porta 6112.

Conceitualmente, o que você precisa fazer é pegar os segmentos UDP desses pacotes de transmissão IP e enviá-los via IP (unicast) para os clientes remotos que estão fora do domínio de transmissão dos servidores. Como você já sabe, o IP-unicast irá (vai) além de seus gateways até o computador remoto.

Dependendo da complexidade do protocolo que o Warcraft implementa, você realmente precisa capturar, extrair e enviar as mensagens ou simplesmente criá-las você mesmo.

Acho que já existe uma implementação deste aqui . Adapte / experimente e veja o que ele faz por você.

    
por 26.03.2013 / 12:58

Tags