Eu posso ajudá-lo, em parte, com o seguinte roteiro.
Adicionei muitos comentários (para esclarecer o script), mas você pode editá-los.
BTW. Eu usaria o parâmetro -sP
com nmap
. O padrão nmap
varrerá muitas portas (lento) e normalmente é suficiente apenas usar o método ping (em uma rede local). Se não for, você pode sempre ajustá-lo.
#!/bin/sh
# the file in which the last know ips are stored
LOG_FILE="last_online.txt"
# use this if you want to "hard" set the ip range
# IP_RANGE="192.168.0.1-100"
#
# however, we use this
# this is more flexible and gets the ip range from the ip-command
# if this doesn't work use the "hard"-setting above
# result is i.e. 192.168.0.1/24
IP_RANGE='ip -o addr show | grep inet\ | grep eth | cut -d\ -f 7 | head -n1'
# this would give you IP numbers ONLY (no text "appears to be up")
# i didn't use it here because the message "Host xx (ip) appears to be up"
# is (almost) exactly what we want
# ONLINE='nmap -oG - -sP $IP_RANGE | grep ": Up" | awk '/Host/{print $2}''
# and this line gives us a complete message-line
# like "Host router (192.168.1.254) appears to be up."
ONLINE='nmap -sP $IP_RANGE | grep "up\."'
# loop through all the "up" ip addresses
while read -r IP
do
# check if IP-line (with complete appears-text) exists in last know ip-file
if ! grep -Fxq "$IP" $LOG_FILE
then
# if not, do this (note the ! in the if-line)
# my own script for sending udp signal to my windows-app
# /home/util/udp.pl 1200 "$IP"
# smclient winpopup message
# couldn't get this to work in win7 anymore
# echo "$IP" | smbclient -M YOUR_PC
# ok, lets send an e-mail
echo "$IP" | mail -s "$IP" [email protected]
fi
done <<< "$ONLINE"
# write the new online ip addresses to the log_file
echo "$ONLINE" > $LOG_FILE
O único problema que encontrei foi enviar uma mensagem para o meu PC com Windows 7.
Eu tenho meu próprio aplicativo do Windows (sempre presente na bandeja de tarefas) que monitora chamadas telefônicas recebidas e que se comunica com meu servidor Linux por meio de pacotes UDP. No meu script, essa é a linha com /home/util/udp.pl
(para enviar um pacote de transmissão UDP na porta 1200).
Eu tentei smbclient
enviar uma mensagem, mas não consegui fazer isso funcionar. Talvez você tenha mais sorte na sua caixa do Ubuntu.
Então eu adicionei uma linha para enviar uma mensagem via e-mail.
Você deve primeiro tentar se pode enviar mensagens com o Ununtu para suas outras estações de trabalho (ou desktop local):
echo "hello world" | smbclient -M YOUR_PC
ou
echo "hello world" | smbclient -M YOUR_PC -U YOUR_USERNAME
Se você não puder enviar nada para a sua área de trabalho, terá que se contentar com o método de e-mail.