Descoberta do IP estático do cabo ethernet conectado

1

Ok, então minha pergunta está um pouco por aí, e li muitas perguntas semelhantes, mas elas nunca estão realmente fazendo o que estou tentando realizar.

Portanto, a melhor maneira de descrevê-lo é com este cenário:

Eu tenho 3 computadores, todos com adaptadores Ethernet.

  • Computador de mesa - o Windows, do qual eu trabalho, tem o Cygwin.
  • Um Raspberry Pi portátil - Um que uso quando vou a lugares diferentes.
  • Laptop com Ubuntu - eu levo isso em quase todos os lugares como um plano de backup

Quando eu movo meu pi de framboesa para outro local de instalação, eu preciso conectá-lo diretamente a outro computador via eth0. A questão é que eu odeio puxar meu laptop e permitir um monte de soluções de encaminhamento para permitir que essa máquina de outras pessoas funcione com o meu pi.

Eu tenho que definir o IP estático do Pi para algo como 192.168.0. * e o computador de trabalho 192.168.0.1 cada vez que eu quiser me conectar a ele. Eu quero parar de ter que puxar um teclado e outras ferramentas para tentar definir essas opções. Agora, eu já fiz um script python que define o IP do Pi para 192.168.0.3 assim que ele inicia e o encontra sem uma conexão via DHCP.

Isso é bom para conectar à minha área de trabalho e estou forçando minha Ethernet a permanecer em um determinado IP, e ter alguns hacks na parte de trás para compartilhar interfaces de conexão. Eu simplesmente não posso usar isso com outras máquinas.

O que leva à pergunta real: Como, se possível, posso fazer com que o meu Pi consulte a Ethernet para ver se o computador conectado diretamente a ele já tem um endereço IP estático definir e, em seguida, simplesmente definir seu próprio para um IP correspondente para emparelhar?

Então, o que estou dizendo é que eu preciso conectar esse pi em uma máquina. Qual o IP para seu adaptador (o host) já está configurado para algo. Diga que é realmente 192.168.172.1 agora; e o pi reconhecerá 192.168.172 ._ e ajustará seu endereço para algo como 3 ou 31, para que eu possa usar o SSH nele.

Eu tenho dito por "profissionais" que isso não pode ser feito, mas eu não acredito nisso. Este é o século 21 e não temos conexões mutativas. Blasfêmia. Haha, eu quero descobrir isso e acho que será útil ter isso no meu arsenal de Linux. "O daemon Ethernet assimilado"

[EDITS:] Como esclarecimento, a conexão será em um único cabo. Se estiver em uma rede como um hub ou switch, eles terão DHCP e os PCs receberão endereços automaticamente. Portanto, nossa solução só precisa se preocupar com a conexão aleatória com outra máquina.

    
por Nate_calypso 26.05.2016 / 19:51

3 respostas

1

Eu não quero colocar meu pé na minha boca, mas eu não acho que o que você está tentando fazer é possível com qualquer máquina aleatória que você conectará este Pi.

Pense nisso. O problema é duplo. No momento da inicialização, o seu R-Pi tem um endereço fixo. Certo ? Se a máquina à qual você está se conectando não estiver configurada com esse endereço IP / máscara de sub-rede, como os dois vão se comunicar e trocar informações? Quando você tem seu próprio laptop, você está em um ambiente controlado. Se você está se conectando a uma máquina aleatória, você tem que esperar o inesperado e como você vai lidar com isso? Você pode executar um programa para verificar todos os endereços IP possíveis, começando com os suspeitos usuais como em 192.168.x.y ou 172.10.x.y, mas este é um processo muito longo e tedioso

A segunda coisa é, se a máquina na qual você está conectando o R-Pi está em uma rede diferente, digamos, via Wi-Fi ou outro adaptador de rede, você está pronto novamente.

Você precisa entender, não é o seu R-Pi controlando a conexão. É o outro lado. E quando "outro lado" é aleatório, o que você vai fazer?

    
por 26.05.2016 / 20:10
1

Você pode usar arp-scan :

$ arp-scan --interface=eth0 192.168.0.0/24

ou nmap :

$ nmap -sP 192.168.0.0/24

para verificar todos os endereços em uma rede para uma resposta.

O problema é: você assume que todo computador ao qual seu Pi se conecta está na rede 192.168.0.0/24, como mostram os exemplos acima, ou não?

Se você fizer isso, a verificação não demorará muito - 3,56 segundos com nmap e 2,28 segundos com arp-scan na minha rede WiFi.

Você assume que todos estão no 192.168.0.0/16 como especificado no RFC 1918, o que leva cerca de 4,5 minutos com arp-scan ?

Na mesma velocidade de varredura, uma varredura de 10.0.0.0/8 levaria quase 18 horas.

Mas se você verificar os 4.294.967.296 endereços IP possíveis, poderá levar mais de meio ano!

Então, é claro, estamos assumindo que ele tenha um endereço IPv4. Pode ser no IPv6, que funciona a 2.420.352.024 anos!

Se você digitalizar algo maior que um 192.168.0.0/24, você pode também conectar um teclado: -)

    
por 26.05.2016 / 20:39
0

Se você conectar seu r-pi a uma rede que tenha uma quantidade razoável de tráfego, você poderá monitorar o tráfego ARP na interface.

Isso é semelhante à resposta de @ garethTheRed, mas depende de monitoramento passivo em vez de pesquisa ativa. Pode levar um tempo significativo antes que um pacote ARP seja visto. Executar ping ou algo da máquina que você deseja conectar ajudará.

Você pode usar tcpdump -l -n -i eth0 arp para ouvir em eth0 os pacotes ARP. Quando seu script detectar um pacote ARP who-has ou ARP Reply , extraia o endereço IP, escolha um IP aleatório na mesma sub-rede que ainda não esteja na tabela ARP e tente usá-lo.

Como alternativa, em vez de tcpdump , você pode executar arp -n -i eth0 | awk 'NR>1 && !/incomplete/ {print $1}' de tempos em tempos para gerar uma lista de endereços IP vistos da tabela ARP do kernel.

AVISO : O fato de você não ter visto um IP sendo usado na rede enquanto estava assistindo não significa que ele não esteja sendo usado ou alocado a outra máquina Isso pode significar que ele não está ativo recentemente na rede ou que você está em uma rede comutada e não enviou nenhum pacote de transmissão. Espere gritar se você seqüestrar um endereço IP pertencente a outra pessoa na rede. Pode haver outras consequências dependendo dos efeitos colaterais do seqüestro do IP (por exemplo, seqüestrar o endereço IP pertencente a um servidor ou roteador, ou o laptop do chefe, pode ser uma ofensa sutil)

Outra opção que provavelmente será menos trabalhosa é:

  1. defina um endereço IP estático no seu r-PI. Use um endereço IP privado RFC-1918. Use a mesma sub-rede para todos os computadores em sua própria LAN. Escolha um que provavelmente não esteja em uso em outros sites (por exemplo, NÃO um dos padrões mais usados, como 192.168.0.x).

  2. sempre que você precisar se comunicar com seu r-PI de outra máquina, basta adicionar um segundo endereço IP em sua sub-rede à interface Ethernet da máquina, se ela ainda não estiver na mesma sub-rede.

Observação: os switches de rede às vezes são configurados para descartar pacotes de sub-redes desconhecidas. Nesse caso, sua melhor opção é simplesmente desistir e ter seu r-PI como um cliente DHCP (fazer não executar um dhcp servidor no seu r-PI e depois conecte-o a uma rede que você não possui / controla ou que tenha outro servidor dhcp rodando nele).

    
por 27.05.2016 / 10:27