Surveiller nmap pour lancer motioneye

Bonjour,
je présente dans un premier temps mon objectif: automatiser le lancement de motioneye lorsque je quitte mon domicile.
Je sais lancer motioneye en SSH depuis mon téléphone, le problème est juste que je n’y pense pas à chaque fois que je sors de chez moi…

J’ai découvert que la commande nmap -sn 192.168.1.0/24 est capable de détecter si mon téléphone portable est connecté ou non au réseau wifi. Nmap pourrait donc faire déduire à mon serveur si je suis chez moi ou non.

Nmap scan report for iphone.home (192.168.1.16)
Host is up (0.0064s latency).

Ainsi j’aimerais exécuter en tâche cron un script qui surveillerait la présence ou non de mon téléphone sur le réseau wifi. Le script de lancement de motioneye est déjà opérant.

Je ne maitrise pas l’écriture de scripts avec if/then/do, est-ce que quelqu’un saurait m’expliquer comment écrire un tel script ?

Si « nmap -sn 192.168.1.0/24 » trouve iphone.home (ou l’adresse IP 192.168.1.16) sur le réseau, alors ne fait rien ; si « nmap -sn 192.168.1.0/24 » ne trouve pas iphone.home, alors exécute script_lancement_motioneye.

Merci pour vos idées et suggestions. Je me donne le challenge d’écrire moi-même par la suite le script inverse (arrêter motioneye une fois que mon téléphone a réapparu sur le réseau wifi)

Thanks !

Le problème est que la détection par nmap -sn qu’un iphone est présent sur le réseau local wifi est loin d’être fiable. Chez moi :

fp2@debpacha:~ 3s $ nmap -sn 192.168.1.51
Starting Nmap 7.70 ( https://nmap.org ) at 2021-02-23 14:17 CET
Nmap scan report for iphone-1.home (192.168.1.51)
Host is up (0.082s latency).
Nmap done: 1 IP address (1 host up) scanned in 7.61 seconds
fp2@debpacha:~ 8s $ nmap -sn 192.168.1.51 | fgrep -i Host
Host is up (0.031s latency).
Nmap done: 1 IP address (1 host up) scanned in 5.54 seconds
fp2@debpacha:~ 6s $ nmap -sn 192.168.1.51 | fgrep -i up
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 3.01 seconds
fp2@debpacha:~ 3s $

Déjà que le système iOS bloque les paquets ICMP ( ping) et donc pas de traceroute, pas de ping :frowning:

Pour déterminer si l’iphone est sur le réseau local

IP_IPHONE=192.168.1.16
iphone_up()
{ 
   nmap -sn $IP_IPHONE | fgrep 'is up'
   return $?
}

Utilisation :

fp2@debpacha:~ $ iphone_up && echo up || echo down
down
fp2@debpacha:~ 3s $

Ne pas tout balayer, déjç qu’avec une seule IP ce n’est pas fiable, pourquoi partir sur une méthode qui va prendre un temps insupportable.

Ce serait

iphone_up || lancer_motioneye

mais il va y avoir des lancements intempestifs.

Cordialement,
Regards,
Mit freundlichen Grüßen,
مع تحياتي الخالصة


F. Petitjean
Ingénieur civil du Génie Maritime.

« On ne perd pas son temps en aiguisant ses outils. »
Proverbe français

« Moi, lorsque je n’ai rien à dire, je veux qu’on le sache. » (R. Devos)