Отчасти я могу помочь вам со следующим сценарием.
Я добавил много комментариев (чтобы уточнить сценарий), но вы можете их отредактировать.
КСТАТИ. Я бы использовал параметр -sP
с nmap
. По умолчанию nmap
будет сканировать много портов (медленно), и обычно достаточно просто использовать ping-метод (в локальной сети). Если это не так, вы всегда можете настроить его.
#!/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" your_email@example.com
fi
done <<< "$ONLINE"
# write the new online ip addresses to the log_file
echo "$ONLINE" > $LOG_FILE
Единственной проблемой, с которой я столкнулся, была отправка сообщения на мой ПК с Windows 7.
У меня есть собственное Windows-приложение (всегда присутствует в панели задач), которое отслеживает входящие телефонные звонки и связывается с моим сервером Linux через UDP-пакеты. В моем скрипте это строка с /home/util/udp.pl
(для отправки пакета UDP-широковещания через порт 1200).
Я пытался smbclient
, чтобы отправить сообщение , но не могу получить, чтобы работать. Может быть, у вас больше удачи на вашей Ubuntu-коробке.
Поэтому я добавил строку для отправки сообщения по электронной почте.
Сначала вы должны попробовать, если вы можете отправлять сообщения с Ununtu на другие рабочие станции (или локальный рабочий стол):
echo "hello world" | smbclient -M YOUR_PC
или же
echo "hello world" | smbclient -M YOUR_PC -U YOUR_USERNAME
Если вы ничего не можете отправить на рабочий стол, вам придется согласиться на метод электронной почты.