2010-03-07 79 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 =向下

相關問題