是否有类似于iwevent的命令来监控eth0状态?

时间:2010-03-07 01:28:11

标签: shell network-programming

当我加入或离开某些网络时,我想设置我的计算机以运行某些命令(例如:在工作时启动Synergy;在家中的局域网上启动ssh以便我可以同步等等)。

我发现iwevent将事件输出到我可以观看的无线接口。但是,当eth0连接或断开连接时,我找不到等效的监视器。 我试过ip monitor但输出的数据太多了我无法理解它。

是否有任何命令可用于监控eth0的状态更改? Python可用的API也适用。

5 个答案:

答案 0 :(得分:3)

另请查看/ sys / class / net /

下的文件

对于eth0子目录/ sys / class / net / eth0 / 文件:

运营商,休眠,开放式

根据链接条件进行更改:

如果up + cable: carrier = 1,dormant = 0,operstate = up

如果up + NO cable: carrier = 0,dormant = 0,operstate = down

如果down + cable: cat carrier =参数无效,cat dormant =参数无效,operstate = down

答案 1 :(得分:2)

我设法自己解决了这个问题。

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

该命令打印出对接口的链接状态更改,grep out特定于eth0或wlan0的行是关于状态并且是DOWN或UP(wlan0也输出DORMANT状态,我不需要)然后使用awk以便它只输出接口和状态信息。

该命令打印出“eth0:DOWN”和“wlan0:UP”等行。

我可以将它传输到shell脚本中,也许使用sed替换:with a space并拆分信息。

答案 2 :(得分:0)

使用netstat -i -c每秒连续运行....

tommieb@darkstar:~$ 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
tommieb@darkstar:~$

然后就是在'RX-OK'(收到确认)和'TX-OK'(传输正常)下的列中搜索...

答案 3 :(得分: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

答案 4 :(得分:0)

至少在Debian和Ubuntu上,激活网络接口运行/etc/network/if-up.d/中的脚本(并且有一个对称的if-down.d目录用于停用)。所以你可以在那里添加自己的脚本。脚本通过几个环境变量获取信息,这在interfaces手册页中有记录。

该主题有一个page in the Ubuntu wiki

使用默认的Ubuntu配置和相当现代的网卡,当插入电缆时,接口会自动激活。手动(de)激活界面的命令是ifup eth0ifdown eth0;或者,如果您愿意,可以使用网络管理器。

对于ppp连接(例如,拨号和DSL与某些提供商),将运行/etc/ppp/ip-up.d下的脚本。它们记录在pppd手册页中。