当我加入或离开某些网络时,我想设置我的计算机以运行某些命令(例如:在工作时启动Synergy;在家中的局域网上启动ssh以便我可以同步等等)。
我发现iwevent将事件输出到我可以观看的无线接口。但是,当eth0连接或断开连接时,我找不到等效的监视器。
我试过ip monitor
但输出的数据太多了我无法理解它。
是否有任何命令可用于监控eth0的状态更改? Python可用的API也适用。
答案 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 eth0
和ifdown eth0
;或者,如果您愿意,可以使用网络管理器。
对于ppp连接(例如,拨号和DSL与某些提供商),将运行/etc/ppp/ip-up.d
下的脚本。它们记录在pppd
手册页中。