2011-12-22 11 views
3

Linuxで使用済みのポートとその状態を取得するにはどうすればよいですか?基本的には、netstatのすべてが行うことができますが、C?使用済みポートと状態を取得する

+3

あなたはnetstatがC言語で書かれていないと思いますか? http://src.gnu-darwin.org/src/usr.bin/systat/netstat.c.htmlまたはcode.turnkeylinux.org/busybox/networking/netstat.c – fvu

+0

また、 'netstat'がすでにあなたに何をしているのかなぜ、それを書き換える必要がありますか? – dreamlax

+0

私はnetstatを書き直すつもりはなく、自分のプログラムの1つに似た機能を持っているだけです。 – Doddy

答えて

3

netstatの実行時にstraceを実行すると、システムがmakeとその引数を呼び出すようになります。

$ strace netstat 
... 
open("/proc/net/tcp6", O_RDONLY)  = 3 
open("/proc/net/udp", O_RDONLY)   = 3 
... 

これは、多くの場合、プログラムが何をしているかを知るための良い方法や落札呼び出しであり、あなたが必要とするすべてがアップで見ているの呼び出しを見つけるのであれば、時には、ソースを見ているよりも簡単にすることができマニュアルページ。

1

「netstatでできることはすべて」はnetstatから始めることができます。ソースコードはここにある:

http://net-tools.git.sourceforge.net/git/gitweb.cgi?p=net-tools/net-tools;a=blob;f=netstat.c;h=f046f09162689f258f8920c1c2af27e01cdc77f2;hb=HEAD

netstatが何をするかのほとんどは、それが/procファイルシステムから取得したことに留意すべきです。 *_do_oneルーチンが「興味深い」腸の大部分を保持しているように見えます。

+0

私はそれが素朴な質問であることを意味していませんでした。ただ、一連のメソッドがあることを期待していましたが、 '/ proc'からファイルを読み込むことに驚いています...それは悪い戦術プログラムのために?例として、 '/ proc/uptime'とは異なり、' sysinfo() 'を使用して稼働時間を取得します。 – Doddy

+1

@bean: '/ proc/uptime'は標準の*ファイル*ではありませんが、アップタイムを提供するカーネルのデバイスドライバに直接アクセスします(テキスト形式)。 '/ proc'の残りの部分は同じように動作します。 –

+0

一般的に、 '/ proc'と'/sys'ファイルシステムは、多くのLinuxカーネルサブシステムの優先インタフェースです。重複した機能を提供するライブラリ関数がある場合、それらはしばしば(常にではないが)procへのアクセスに関するラッパーとしてlibcに実装されている。 'sysinfo'がそのような呼び出しであるが、そのマンページがproc(5)にリンクしているのであれば、わかりません。 – BRFennPocock

関連する問題