我想在我加入或離開某些網絡時設置我的計算機運行某些命令(例如:在工作時啓動Synergy;在家中使用lan時啓動ssh,以便可以同步等等)。是否有類似於iwevent的命令來監視eth0狀態?
我找到了iwevent,它將事件輸出到我可以觀看的無線接口。但是,當eth0連接或斷開連接時,我找不到要觀看的對等物。 我試過ip monitor
但是有太多的數據輸出我無法正確使用它。
是否有任何命令可用於監視eth0的狀態更改? Python可用的API也可以工作。
我想在我加入或離開某些網絡時設置我的計算機運行某些命令(例如:在工作時啓動Synergy;在家中使用lan時啓動ssh,以便可以同步等等)。是否有類似於iwevent的命令來監視eth0狀態?
我找到了iwevent,它將事件輸出到我可以觀看的無線接口。但是,當eth0連接或斷開連接時,我找不到要觀看的對等物。 我試過ip monitor
但是有太多的數據輸出我無法正確使用它。
是否有任何命令可用於監視eth0的狀態更改? Python可用的API也可以工作。
使用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)...
有趣的是,對於eth0來說適度地工作,雖然它不是最佳的。 我可能通過自己輪詢另一個命令獲得相同的結果。 對我來說,即使斷開連接,wlan0也總是報告正常。 我可以聽iwevent並使用另一個命令來檢查eth0,但如果eth0可能的話,我更喜歡實際的事件。 – 2010-03-07 02:15:49
@daniel:嗯......我不會100%自信地說,如果你想要可移植性,它可以在另一個* nix變體下工作......但是可以想象netstat輸出在所有linux類型中都是相同的.... – t0mm13b 2010-03-07 02:44:36
#!/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
我設法自己解決了這個問題。
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來替換:用空格和分隔信息。
至少在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
手冊頁中。
而且看看在/ sys/class文件/網/
爲eth0子目錄/ SYS /班/網/的eth0/ 文件:
載體,休眠,operstate
變化取決於鏈路條件:
如果向上+電纜:載體= 1,休眠= 0,operstate =向上
如果向上+ NO電纜:載體= 0,休眠= 0,operstate =向下
如果向下+電纜:貓載體=無效的參數,貓休眠=無效的參數,operstate =向下
任何特定的操作系統? – 2010-03-07 01:31:41
我正在使用Ubuntu。 – 2010-03-07 02:02:28