2010-03-07 4 views
1

Я хочу настроить свой компьютер для запуска определенных команд, когда я присоединяюсь или покидаю определенные сети (т. Е. Запускаю синергию при работе; запустите ssh, когда на домашнем компьютере, чтобы я мог синхронизировать и т. Д.).Есть ли команда, подобная iwevent для контроля состояния eth0?

Я нашел iwevent, который выводит события на беспроводной интерфейс, который я могу посмотреть. Однако я не могу найти эквивалент для просмотра, когда eth0 подключен или отключен. Я попробовал ip monitor, но есть так много данных, что я не могу использовать его в здравом уме.

Есть ли какая-либо команда, которую я могу использовать для мониторинга изменений состояния в eth0? Также доступен API, доступный для Python.

+0

Любая конкретная ОС? –

+0

Я использую Ubuntu. –

ответ

0

Использование netstat -i -c, который будет работать непрерывно каждую секунду ....

 
[email protected]:~$ netstat -i 
Kernel Interface table 
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg 
eth1  1500 0  22259  0  0 0   13558  0  0  0 BMRU 
lo  16436 0   0  0  0 0    0  0  0  0 LRU 
[email protected]:~$ 

Тогда это дело за оглавлению колонок под «RX-OK» (Получать нормально) и «TX-OK» (передайте нормально) ...

+0

Интересно, работает умеренно для eth0, хотя это не совсем оптимально. Я мог бы получить те же результаты, опросив другую команду самостоятельно. Для меня wlan0 всегда сообщает нормально даже при отключении. Я мог бы слушать iwevent и использовать другую команду для проверки eth0, но я предпочел бы реальные события, если это возможно, для eth0. –

+0

@ daniel: hmmm .... Я бы не стал на 100% уверенным в том, что если вы хотите переносимость, то он будет работать под другим вариантом * nix .... но мог бы представить, что вывод netstat будет одинаковым во всех linux-типах .... – t0mm13b

0
#!/bin/bash 
interface="eth0" 
val=0 
sec=10 #seconds to sleep 
while true 
do 
    val=$(netstat -I="$interface" | awk 'END{print $8}') 
    if [ "$val" != "$p" ];then 
    echo "Interface: $interface ok" 
    else 
    echo "Interface: $interface no activity for $sec seconds" 
    fi 
    sleep $sec 
    p=$val  
done 
2

Мне удалось решить проблему самостоятельно.

ip monitor link | grep --line-buffered '\(eth0\|wlan0\).\+state \+\(DOWN\|UP\)' - | awk '{print $2$9}' 

Этой команда выводит изменения состояния связей на интерфейсы, отбирает из линий, характерных для eth0 или wlan0, которые о состоянии и DOWN или UP (wlan0 также выводит дремлющее состояние, которые мне не нужно), а затем использует awk, чтобы он выводил информацию только о интерфейсе и состоянии.

Команда печатает строки типа «eth0: DOWN» и «wlan0: UP».

Я могу просто передать это в сценарий оболочки, возможно, использовать sed, чтобы заменить: пробел и разделить информацию.

0

В Debian и Ubuntu, по крайней мере, активация сетевого интерфейса запускает скрипты в /etc/network/if-up.d/ (и существует дециктивация симметричного каталога if-down.d). Таким образом, вы можете добавить свой собственный сценарий. Сценарии получают информацию через несколько переменных среды, это задокументировано в справочной странице interfaces.

На эту тему есть page in the Ubuntu wiki.

С настройкой по умолчанию Ubuntu и современной сетевой картой интерфейс автоматически активируется, когда кабель подключен к нему. Команды для (de) активировать интерфейс вручную: ifup eth0 и ifdown eth0; или вы можете использовать Network Manager, если хотите.

Для соединений ppp (например, dial-up и DSL с некоторыми провайдерами) вместо этого запускаются сценарии под /etc/ppp/ip-up.d. Они задокументированы в справочной странице pppd.

3

Также посмотрите на файлы в каталоге/SYS/класс/нетто/

для eth0 подкаталоге/SYS/класс/сети/eth0/ файлы:

носителя, спящие, operstate

изменяется в зависимости от условий линии связи:

, если до + кабель: носителя = 1, бездействующий = 0, = operstate до

если до + NO кабель: носитель = 0, бездействующим = 0, operstate = вниз

если вниз + кабель: кошка носитель = Недопустимый аргумент, кот дремлет = Недопустимый аргумент, operstate = вниз

Смежные вопросы