Como detectar um iPhone conectando uma rede?

4

Eu observei ao assistir o Wireshark que quando um iPhone se conecta a uma rede wifi, ele envia alguns pacotes IGMP / MDNS para o 224.0.0.251 (LAN broadcast, eu acho). Existe alguma maneira fácil de observar esses pacotes e, em seguida, executar um script ou enviar um evento?

Ou a melhor maneira de executar um sniffer de pacotes? Qualquer um simples que pode enviar eventos ou executar comandos de curvas quando um filtro é acionado?

Quando eu corro nc -u -l 5353 Eu recebo:

My-Name-iPhonelocal???
                            x???)??
                                  ??cc^C

Posso fazer algo como: nc -u -l 5353 | grep iPhonelocal | execute o comando ...

    
por JayCrossler 05.12.2009 / 19:05

5 respostas

3

Esse comportamento não está relacionado ao iPhone exclusivamente. De acordo com a RFC 3171, o IP 224.0.0.251 é usado para o DNS Multicast. O recurso Multicast DNS da tecnologia Bonjour permite que dispositivos em uma rede local se conectem uns aos outros por nome sem um servidor DNS separado.

Se você deseja detectar determinados dispositivos em sua rede, você deve usar o nmap e a detecção remota do sistema operacional (OS-Fingerprinting), mas isso não é 100% preciso.

    
por 05.12.2009 / 19:44
1

Do seu comentário:

I'm basically trying to run a script as soon as my iPhone comes within range of my home network to turn a light on. Any ideas? Someone else had suggested using sed.

Isso parece um projeto divertido!

Você pode fazer isso pesquisando a cada 1 ou 2 segundos com um ping. É um pouco desajeitado, mas os pings causam uma sobrecarga insignificante.

  1. Configure o seu servidor DHCP para distribuir sempre o mesmo IP para o seu iPhone (com base no seu endereço MAC)

  2. Execute um script no seu computador Linux que tente executar o ping desse IP a cada n segundos.

  3. Ligue / desligue suas luzes com base em alguns critérios simples de resposta a ping

Se você tivesse um aplicativo de monitoramento como o Zabbix, poderia fazer isso com muita facilidade. Você configuraria um teste de ping para o seu iPhone e criaria um disparador que executasse um script externo (para ligar / desligar a luz). O Zabbix é um exagero se isso for todo para o qual você está usando, mas você pode usar outros usos também, tenho certeza. :)

Além disso, na sua lógica de script / acionador, você deve tentar evitar o flicker. A luz deve ser ligada assim que 1 ping obtiver uma resposta. Ele só deve desligar depois que os pings ficarem sem resposta por 5 minutos completos. Dessa forma, suas luzes não acenderão quando houver congestionamento na rede.

    
por 19.03.2010 / 23:09
1

Hehe, OK, eu vou morder. Considere fazer algo assim (estou sendo vago, pois você terá que adaptá-lo às ferramentas disponíveis):

  1. obtenha o endereço MAC do seu iPhone
  2. execute um daemon dhcpd na sua caixa * nix
  3. certifique-se de que o servidor está registrando
  4. escreva um script [shell / perl / ruby / python] para monitorizar esse ficheiro de registo e tome medidas para encontrar uma linha que corresponda a esse endereço MAC

Por outro lado, isso parece uma abordagem mais fácil do que tentar interagir com um sniffer em tempo real (no entanto, talvez o snort possa ser configurado para fazer algo assim).

Estou, é claro, supondo que o iPhone tentará renovar seu contrato a cada conexão.

Boa sorte!

    
por 20.03.2010 / 01:45
1

Um tempo atrás eu notei que meu firewall ficava perdendo pacotes assim, e registrando as quedas no kern.log. Sua postagem me inspirou a preparar um pequeno script para me avisar quando um determinado iPhone estiver conectado ao meu Wi-Fi.

#!/bin/bash

if [ "$1" != "ehlo" ]; then
    # If the script is ran, restart with the correct stdin
    tail -Fn 0 /var/log/kern.log | $(readlink -f $0) "ehlo"
    exit 0
fi

lasttime=0

while [ true ]; do
    read derp
    if [ $(echo "$derp" | fgrep -c "0m:ac:ad:dr:es:s0") -gt 0 ];then
        if [ $(($(date +%s)-$lasttime)) -ge 30 ];then
            lasttime=$(date +%s)
            # Pop up an ubuntu notification (requires libnotify-bin)
            notify-send "kern.log" "iPhone has appeared"
        fi
    fi
done
    
por 21.03.2012 / 20:25
0

link

Você pode ser configurado de alguma forma para responder ao tráfego de transmissão.

Eu uso port-knocking para proteger o SSH em alguns servidores. Tenho certeza de que o que você está tentando fazer não está coberto em nenhum dos exemplos, mas pode ser possível.

    
por 06.12.2009 / 07:32