lsofとssが接続のメタデータを提供していることを知っています。どこで手に入れましたか?
たとえば、次は接続を表します。
ls -al /proc/102922/fd/98
lrwx------ 1 me me 64 dic 21 06:06 /proc/102922/fd/74 -> 'socket:[3803248]'
ss でより多くの情報を見ることができます。
tcp ESTAB 0 0 192.168.68.108:33966 198.252.206.25:https users:(("chrome",pid=102922,fd=98)) cubic wscale:9,7 rto:296 rtt:92.785/24.455 ato:40 mss:1448 pmtu:1500 rcvmss:536 advmss:1448 cwnd:10 bytes_sent:1463 bytes_acked:1464 bytes_received:336 segs_out:11 segs_in:7 data_segs_out:6 data_segs_in:2 send 1.25Mbps lastsnd:71284 lastrcv:71292 lastack:26068 pacing_rate 2.5Mbps delivery_rate 271kbps delivered:7 app_limited busy:308ms rcv_space:14480 rcv_ssthresh:64088 minrtt:86.996
しかし、私のアプリケーションが実行されているシステムに何らかの理由でssがないとしましょう。ソケット:[3803248]から、ssが提供するtcp統計にどのように移動できますか? ssを完全に書き換える予定はありません:) しかし、ファイルシステムに何が存在するのか疑問に思います。
答え1
ヒント:これらの問題は通常、次のようstrace -o logfile.txt programname
に実行することで解決できます。あなたの場合はソケットをss
作成しAF_NETLINK
、それを介してメッセージを送受信するのを見ることができます。
ネットリンクネットワークスタックの内部へのアクセスを提供するように設計されたカーネルへの論理インタフェース。
あなたはそれを使用してldd $(which ss)
見つけることができますss
金ライブラリ - これらのメッセージを生成、送信、受信、および解析できます。理論的にはもちろん、これらのメッセージを直接書くことはできますが、libmnlを部分的に再実装するだけです(おそらく悪いかもしれません)、それを使用したいと思います。カーネル部分を発明した同じ人が行ったので、それは当然の意味です。