2010-03-07 82 views
1

我想在我加入或离开某些网络时设置我的计算机运行某些命令(例如:在工作时启动Synergy;在家中使用lan时启动ssh,以便可以同步等等)。是否有类似于iwevent的命令来监视eth0状态?

我找到了iwevent,它将事件输出到我可以观看的无线接口。但是,当eth0连接或断开连接时,我找不到要观看的对等物。 我试过ip monitor但是有太多的数据输出我无法正确使用它。

是否有任何命令可用于监视eth0的状态更改? Python可用的API也可以工作。

+0

任何特定的操作系统? – 2010-03-07 01:31:41

+0

我正在使用Ubuntu。 – 2010-03-07 02:02:28

回答

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]:~$ 

然后,它的grepping了下 'RX-OK' 列的问题(收到OK)和 'TX-OK'(传输OK)...

+0

有趣的是,对于eth0来说适度地工作,虽然它不是最佳的。 我可能通过自己轮询另一个命令获得相同的结果。 对我来说,即使断开连接,wlan0也总是报告正常。 我可以听iwevent并使用另一个命令来检查eth0,但如果eth0可能的话,我更喜欢实际的事件。 – 2010-03-07 02:15:49

+0

@daniel:嗯......我不会100%自信地说,如果你想要可移植性,它可以在另一个* nix变体下工作......但是可以想象netstat输出在所有linux类型中都是相同的.... – t0mm13b 2010-03-07 02:44:36

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}' 

即命令打印出链路状态变化到接口,里grep出的是关于状态和是向下或向上(为wlan0还输出我不需要DORMANT状态),然后具体为eth0或为wlan0线使用awk,以便它只输出接口和状态信息。

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

我可以将其转换为shell脚本,也许可以使用sed来替换:用空格和分隔信息。

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手册页中。

3

而且看看在/ sys/class文件/网/

为eth0子目录/ SYS /班/网/的eth0/ 文件:

载体,休眠,operstate

变化取决于链路条件:

如果向上+电缆:载体= 1,休眠= 0,operstate =向上

如果向上+ NO电缆:载体= 0,休眠= 0,operstate =向下

如果向下+电缆:猫载体=无效的参数,猫休眠=无效的参数,operstate =向下

相关问题