ファイルシステムのどこからソケットのメタデータを取得できますか?

ファイルシステムのどこからソケットのメタデータを取得できますか?

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を部分的に再実装するだけです(おそらく悪いかもしれません)、それを使用したいと思います。カーネル部分を発明した同じ人が行ったので、それは当然の意味です。

おすすめ記事