我需要找到正在執行的客戶端程序在打開到服務器的TCP連接時設置的套接字選項。客戶端在Linux上運行。它是否可用於/proc/tcp
?在Linux中找到由可執行程序設置的套接字選項
3
A
回答
-2
lsof
與-p [PROC_ID]
標誌顯示該過程的打開fd。如果你man lsof
有幾百種不同的東西你可以找到關於這些插座。下面是標準用法:
[ 11:42 [email protected] /proc/6828 ]# lsof -p 6828
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
SOAnswer_T 6828 jon cwd DIR 8,17 4096 3498003 /home/jon/SO/python
SOAnswer_T 6828 jon rtd DIR 253,0 4096 2/
SOAnswer_T 6828 jon txt REG 253,0 6088 38614 /usr/bin/python
SOAnswer_T 6828 jon mem REG 253,0 20676 16173 /usr/lib/python2.6/lib-dynload/selectmodule.so
SOAnswer_T 6828 jon mem REG 253,0 32800 91247 /usr/lib/python2.6/lib-dynload/_struct.so
SOAnswer_T 6828 jon mem REG 253,0 37180 91249 /usr/lib/python2.6/lib-dynload/arraymodule.so
SOAnswer_T 6828 jon mem REG 253,0 30496 16167 /usr/lib/python2.6/lib-dynload/operator.so
SOAnswer_T 6828 jon mem REG 253,0 10448 16137 /usr/lib/python2.6/lib-dynload/_randommodule.so
SOAnswer_T 6828 jon mem REG 253,0 13552 16157 /usr/lib/python2.6/lib-dynload/fcntlmodule.so
SOAnswer_T 6828 jon mem REG 253,0 17152 91253 /usr/lib/python2.6/lib-dynload/cStringIO.so
SOAnswer_T 6828 jon mem REG 253,0 11648 12778 /lib/libcom_err.so.2.1
SOAnswer_T 6828 jon mem REG 253,0 19660 16148 /usr/lib/python2.6/lib-dynload/binascii.so
SOAnswer_T 6828 jon mem REG 253,0 8224 12704 /lib/libkeyutils-1.2.so
SOAnswer_T 6828 jon mem REG 253,0 28920 91246 /usr/lib/python2.6/lib-dynload/_ssl.so
SOAnswer_T 6828 jon mem REG 253,0 36580 15554 /lib/libkrb5support.so.0.1
SOAnswer_T 6828 jon mem REG 253,0 14640 20456 /lib/libutil-2.12.2.so
SOAnswer_T 6828 jon mem REG 253,0 141532 4868 /lib/ld-2.12.2.so
SOAnswer_T 6828 jon mem REG 253,0 1851728 4869 /lib/libc-2.12.2.so
SOAnswer_T 6828 jon mem REG 253,0 202044 5741 /lib/libm-2.12.2.so
SOAnswer_T 6828 jon mem REG 253,0 19788 4870 /lib/libdl-2.12.2.so
SOAnswer_T 6828 jon mem REG 253,0 133136 5431 /lib/libpthread-2.12.2.so
SOAnswer_T 6828 jon mem REG 253,0 76368 5748 /lib/libz.so.1.2.3
SOAnswer_T 6828 jon mem REG 253,0 122420 8431 /lib/libselinux.so.1
SOAnswer_T 6828 jon mem REG 253,0 101068 8430 /lib/libresolv-2.12.2.so
SOAnswer_T 6828 jon mem REG 253,0 25476 16120 /usr/lib/python2.6/lib-dynload/_collectionsmodule.so
SOAnswer_T 6828 jon mem REG 253,0 58404 16141 /usr/lib/python2.6/lib-dynload/_socketmodule.so
SOAnswer_T 6828 jon mem REG 253,0 11500 91240 /usr/lib/python2.6/lib-dynload/_hashlib.so
SOAnswer_T 6828 jon mem REG 253,0 6280 91263 /usr/lib/python2.6/lib-dynload/syslog.so
SOAnswer_T 6828 jon mem REG 253,0 22076 16164 /usr/lib/python2.6/lib-dynload/mathmodule.so
SOAnswer_T 6828 jon mem REG 253,0 16748 91265 /usr/lib/python2.6/lib-dynload/timemodule.so
SOAnswer_T 6828 jon mem REG 253,0 7616 16111 /usr/lib/python2.6/lib-dynload/_bisectmodule.so
SOAnswer_T 6828 jon mem REG 253,0 22560 16175 /usr/lib/python2.6/lib-dynload/stropmodule.so
SOAnswer_T 6828 jon mem REG 253,0 1603772 19175 /usr/lib/libpython2.6.so.1.0
SOAnswer_T 6828 jon mem REG 253,0 190528 63751 /lib/libgssapi_krb5.so.2.2
SOAnswer_T 6828 jon mem REG 253,0 758712 22619 /lib/libkrb5.so.3.3
SOAnswer_T 6828 jon mem REG 253,0 177868 20371 /lib/libk5crypto.so.3.1
SOAnswer_T 6828 jon mem REG 253,0 1596908 63969 /lib/libcrypto.so.1.0.0d
SOAnswer_T 6828 jon mem REG 253,0 358704 64033 /usr/lib/libssl.so.1.0.0d
SOAnswer_T 6828 jon mem REG 253,0 99158720 95278 /usr/lib/locale/locale-archive
SOAnswer_T 6828 jon 0u CHR 136,2 0t0 5 /dev/pts/2
SOAnswer_T 6828 jon 1w FIFO 0,8 0t0 2254540 pipe
SOAnswer_T 6828 jon 2u CHR 136,2 0t0 5 /dev/pts/2
SOAnswer_T 6828 jon 3u IPv4 2254907 0t0 TCP blah:36050->blah2.com.br:http (ESTABLISHED)
或者與-aU
選項只看到插座:
[ 11:46 [email protected] /proc/6828 ]# lsof -aU -p 1511
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
acpid 1511 root 4u unix 0xd9063800 0t0 10860 /var/run/acpid.socket
acpid 1511 root 6u unix 0xda79c200 0t0 10876 socket
/proc/PID/fd
還列出一個進程打開的所有FD的。
更多的好東西在這裏太:See socket options on existing sockets created by other apps?
0
可以ltrace下運行可執行文件,看看它與調用參數使得沿着什麼庫和系統調用。
2
我也需要這樣做。
lsof
沒有什麼幫助,因爲tcp選項沒有在標準/proc/
中公開。
我用這個內核模塊 https://github.com/veithen/knetstat 我修改與舊版本的內核,以及這裏的工作: https://github.com/abligh/knetstat
這讓你做:
# cat /proc/net/tcpstat | head
Recv-Q Send-Q Local Address Foreign Address Stat Diag Options
0 0 0.0.0.0:16013 0.0.0.0:* LSTN SO_REUSEADDR=0,SO_KEEPALIVE=0,TCP_NODELAY=0
0 0 127.0.0.1:25 0.0.0.0:* LSTN SO_REUSEADDR=1,SO_KEEPALIVE=1,TCP_NODELAY=0
0 0 0.0.0.0:111 0.0.0.0:* LSTN SO_REUSEADDR=1,SO_KEEPALIVE=0,TCP_NODELAY=0
0 0 0.0.0.0:4643 0.0.0.0:* LSTN SO_REUSEADDR=1,SO_KEEPALIVE=0,TCP_NODELAY=0
0 0 127.0.0.1:753 0.0.0.0:* LSTN SO_REUSEADDR=1,SO_KEEPALIVE=0,TCP_NODELAY=0
0 0 127.0.0.1:113 0.0.0.0:* LSTN SO_REUSEADDR=1,SO_KEEPALIVE=0,TCP_NODELAY=0
0 0 127.0.0.1:754 0.0.0.0:* LSTN SO_REUSEADDR=1,SO_KEEPALIVE=0,TCP_NODELAY=0
0 0 127.0.0.1:1234 0.0.0.0:* LSTN SO_REUSEADDR=1,SO_KEEPALIVE=0,TCP_NODELAY=0
0 0 0.0.0.0:53618 0.0.0.0:* LSTN SO_REUSEADDR=0,SO_KEEPALIVE=0,TCP_NODELAY=0
相關問題
- 1. 在OSX上設置套接字選項
- 2. 如何在Linux套接字編程中設置/獲取套接字RTT?
- 3. 通過SO_RCVTIMEO套接字選項在Ruby中設置套接字超時
- 4. 在Linux C程序的非特權套接字(非原始)上設置TCP選項
- 5. 如何在Rust中設置套接字選項SO_REUSEPORT?
- 6. 如何在nodejs中爲zeromq設置套接字選項
- 7. Linux套接字和多線程程序
- 8. 你可以在boost asio中設置SO_RCVTIMEO和SO_SNDTIMEO套接字選項嗎?
- 9. SocketImpl設置選項中的套接字關閉異常
- 10. 停止執行程序,直到在android中選擇dialogalert選項
- 11. 在套接字編程中的linux選擇呼叫
- 12. 在Linux中執行線程程序
- 13. 在Linux內核中設置套接字輸出端口號
- 14. 當JVM調用時可以找到Linux套接字API?
- 15. 執行線程的Java套接字
- 16. 可執行程序試圖連接到錯誤的MySQL套接字文件位置
- 17. Linux:如何獲得套接字描述符的TCP套接字選項?
- 18. 在Vue 2路由器中設置嵌套可選參數
- 19. 在Linux C應用程序中的原始套接字VS Libpcap
- 20. 在XAMPP for Windows中找不到套接字配置的位置
- 21. C程序可執行幫助 - Linux
- 22. linux bash找不到執行
- 23. 如何設置QWebView的套接字選項?
- 24. 執行程序PHP的Linux
- 25. 在linux中設置默認`node`可執行文件
- 26. 在TCP套接字編程中執行順序的發送和接收操作
- 27. 套接字選擇空虛設置
- 28. 如何設置基於Linux的可執行(應用程序)圖標Qt
- 29. 在python程序中執行linux命令
- 30. 在Linux中執行OpenGL程序