2011-02-23 19 views
4

非常によく似た質問が投稿されていますが、それらはすべてWindows用です - どのように(可能であれば)私は自分のCプログラムを持つことができますlinux)ネットワークインタフェースを無効にして、もはやパケットを受信しないようにします。UNIXネットワークインターフェイスをプログラムで有効/無効にする

私がこれを行うために必要な機能を誰かに教えてもらえれば、それは素晴らしいことですが、(スクリプト・チュートリアルのような)サンプル・スクリプトやチュートリアルにリンクすれば、ネットワーク・インターフェースをオフ/ 。

答えて

1

Linuxの場合、ifdownを使用できます。私はどのように他のunixesに移植可能かわからない。

+1

これはプログラムです - そのためのC APIはありますか? – Benubird

+1

'apt-get source ifupdown'(またはあなたのディストリビューションの同等物)を使ってソースを入手してください。しかし、これは 'system()'が正しいことであるまれな例外の一つだと思います。 –

1

私が使用したLinuxベースのシステムとほとんどのUnixベースのシステムでは、ifconfig <interface> up/downを使用してインターフェイスをアップ/ダウンします。 ifconfigを実行せずにこのために使用できるCルーチンがあるかどうかは不明です。

1

Linuxの場合、コマンドip link set down dev ethXは、もはや必要なものはありません。私はあなたがそのプラットフォームにいる場合、あなたの仕事をするためにこのプログラムを呼び出すことをお勧めします。

あなた自身でやりたければ、このためのC APIは単純なことではありません。 iprouteソースに潜入して、それが何であるか調べることができます。あなたが別のUnixを使っている場合はC.

でそれを行う方法の優れた例えば

チェックする@ user611775の答え、答えはおそらく各特定の風味のために異なるようにする予定です。

2

は完全な例を持っていないが、次のキーの言葉は、あなたは(他のUnix系についてはよく分から、少なくともLinux上ではない)を始める必要があります。

のioctl、SIOCSIFFLAGS、IFF_UP

次は、限り、関連するAPIを示すとして有用であるかもしれない:Linuxの場合http://www.google.com/codesearch/p?hl=en#2--Ws53NXRc/src/ifdown.c

+4

リンクが死んでいる – Angs

4

、MNLとRTNLプロトコルの知識を簡単になんとかすべて:

Unixまたは他のオペレーティングシステムでは

http://git.netfilter.org/cgi-bin/gitweb.cgi?p=libmnl.git;a=blob;f=examples/rtnl/rtnl-link-set.c;hb=HEAD

、唯一のOS固有のコールおよび/または古風なioctl呼び出しは、適切にインターフェイスごとにLinuxの複数のアドレスを表現することはできませんそのうち後者は入手可能ですので、深刻なプログラムは作成しませんそのプラットフォームでの使用。

+0

それは役に立ちましたが、MNLの詳細へのリンクを教えていただけますか?私はGoogle上でそれを見つけることができません。 – Benubird

+0

リンクをクリックしましたか? *あなたが求めたもののソースコードに行きました。 gitツリーを少し参照すると、READMEが見つかります:http://git.netfilter.org/cgi-bin/gitweb.cgi?p=libmnl.git;a=blob_plain;f=README;hb=ヘッド – MikeyB

+2

リンクが死んでいる、あなたはそれを更新してくださいできますか? – Angs

関連する問題