LinuxでCコードを使ってeth0
をチェックするためのテストケースが必要です。 eth0
がダウンしている場合は、ネットを有効にして、アップとテストに合格したかどうかを確認します。Linuxでイーサネットをチェックする方法は?
3
A
答えて
2
ネットワークインターフェイスはsysfs
:/sys/class/net/eth[x]
です。ここで、リンク、インターフェイスのステータスなどを確認できます。
2
あなたは/ sysの中で周りを取得するためにlibudevを利用することもできます。
http://www.signal11.us/oss/udev/
1
IPアドレスがネットワークカードに割り当てられている場合、私は単にチェック。
/sbin/ifconfig eth0| grep 'inet addr:' | wc -l
これは、単にかどうかをIPアドレスに基づいて、0または1を返す必要があります:
あなたはLANが与えられたネットワークカード(たとえばeth0の)にアップしているかどうかを確認するために、このようなものを使用することができますニックに割り当てられます。
また、ヤン・ラミンのメソッドを使用して、すべてのニックの&をチェックすることができます。
私はあなたがCコードを探しているのを忘れてしまった。たぶん、タグを追加すると良いでしょう。
どちらの方法でも、同じファイル(ifconfig)をcで手動でipで読むことができます。
9
リンクがアップしているかどうかを確認するには、次のようにしてください。 root特権なしで動作します。
#include <stdio.h> // printf
#include <string.h> // strncpy
//#include <sys/socket.h> // AF_INET
#include <sys/ioctl.h> // SIOCGIFFLAGS
#include <errno.h> // errno
#include <netinet/in.h> // IPPROTO_IP
#include <net/if.h> // IFF_*, ifreq
#define ERROR(fmt, ...) do { printf(fmt, __VA_ARGS__); return -1; } while(0)
int CheckLink(char *ifname) {
int state = -1;
int socId = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
if (socId < 0) ERROR("Socket failed. Errno = %d\n", errno);
struct ifreq if_req;
(void) strncpy(if_req.ifr_name, ifname, sizeof(if_req.ifr_name));
int rv = ioctl(socId, SIOCGIFFLAGS, &if_req);
close(socId);
if (rv == -1) ERROR("Ioctl failed. Errno = %d\n", errno);
return (if_req.ifr_flags & IFF_UP) && (if_req.ifr_flags & IFF_RUNNING);
}
int main() {
printf("%d\n", CheckLink("eth0"));
}
IFF_UPが設定されている場合は、インターフェイスがアップしていることを意味します(ifupを参照)。 IFF_RUNNINGが設定されている場合、インタフェースはプラグインされます。 ethtoolのioctl呼び出しも試しましたが、gidがrootでないときは失敗しました。しかし、ログのためだけに:
...
#include <asm/types.h> // __u32
#include <linux/ethtool.h> // ETHTOOL_GLINK
#include <linux/sockios.h> // SIOCETHTOOL
...
int CheckLink(char *ifname) {
...
struct ifreq if_req;
(void) strncpy(if_req.ifr_name, ifname, sizeof(if_req.ifr_name));
struct ethtool_value edata;
edata.cmd = ETHTOOL_GLINK;
if_req.ifr_data = (char*) &edata;
int rv = ioctl(socId, SIOCETHTOOL, &if_req);
...
return !!edata.data;
}
1
この質問は幾分重要なので、私は極端な年齢にもかかわらず別の答えを追加します。/sys/class/net/eth0/operstateの内容を読み取ることができます。これには単に "up \ n"または "down \ n"という文字列が含まれています。
関連する問題
- 1. イーサネットLinuxコントロール
- 2. Linuxで新しいイーサネットUSBネットワークインターフェイスを作成する
- 3. Linuxでwth WiresharkをキャプチャするときのイーサネットFCS
- 4. Haskellを使ってLinuxファイルのファイルパーミッションをチェックする方法は?
- 5. Yocto Linux Wifiとイーサネット間のスマートIPルーティング
- 6. プロセスをチェックする方法は、Pythonで実行しています(Linuxで)?
- 7. 複数のファイルディレクトリに対するパーミッションをチェックする方法 - linux
- 8. イーサネットを他と区別する方法は?
- 9. Linuxでプロセスが使用しているメモリをチェックする方法は?
- 10. USBとイーサネットで同時にadbを起動する方法
- 11. コマンドを使用してLinuxでプロセスのI/O利用をチェックする方法
- 12. Linuxでカメラキャプチャをトリミングする方法は?
- 13. Linuxでマルチスレッドハングプロセスをデバッグする方法は?
- 14. Linuxサーバーの電子メールを自動的にチェックする方法は?
- 15. scala.math.BigDecimalでnullをチェックする方法は?
- 16. laravelでメールをチェックする方法は?
- 17. umbracoでクッキーをチェックする方法は?
- 18. javascriptでヌルクッキーをチェックする方法は?
- 19. ナビゲーションフラグメントアイテムをカスタムカラーでチェックする方法は?
- 20. Scala.jsでnullをチェックする方法は?
- 21. デフォルトでスプリングチェックボックスをチェックする方法は?
- 22. javaでエンコーディングをチェックする方法は?
- 23. condtionでNULLをチェックする方法は?
- 24. Linuxでjvmに割り当てられたヒープサイズをチェックする方法
- 25. タッチオーバー・イーサネットを開発する
- 26. 私はイーサネットを取得するgetifaddrs
- 27. MVC3:reaptchaをAjaxでチェックする方法、またはJSで直接チェックする方法は?
- 28. チェックするチェックボックスをチェックする方法は?
- 29. ScapyでイーサネットFSCを変更
- 30. ボタンを他のボタンでチェックする/チェックを解除する方法は?
@TrueY:1つの質問ですが、リンクのステータスを取得したいと仮定して、ETHTOOL_GLINKとSIOCGIFFLAGSの違いを教えてください。 'ethtool_value.data == 1'は' IFF_UP'と 'IFF_RUNNING'を意味します。私はhttp://stackoverflow.com/questions/33039485/siocethtool-vs-siocgmiiphy-vs-siocgifflagsで詳細な質問をしました。私にあなたの考えを教えてください。 –
@Vivekこれはかなり前のことでしたが、edata.data == 1ならインターフェイスがUPして実行中だと思います。 – TrueY