你可以在不離開你的終端的情況下找到這些東西的答案。
讓我們來看看自己:
# strace netstat -su &> netstat_strace
這將是一個「開放」和「讀」,因爲它正從某個數據(但用grep出它無法讀取/開):
# grep -E 'open|read' netstat_strace | grep -v ENOENT
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\320\37\2\0\0\0\0\0"..., 832) = 832
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
open("/proc/meminfo", O_RDONLY|O_CLOEXEC) = 3
read(3, "MemTotal: 3854816 kB\nMemF"..., 1024) = 1024
open("/proc/net/snmp", O_RDONLY) = 3
read(3, "Ip: Forwarding DefaultTTL InRece"..., 4096) = 1261
open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 4
read(4, "# Locale name alias data base.\n#"..., 4096) = 2570
read(4, "", 4096) = 0
read(3, "", 4096) = 0
open("/proc/net/netstat", O_RDONLY) = 3
read(3, "TcpExt: SyncookiesSent Syncookie"..., 4096) = 2158
read(3, "", 4096) = 0
,並從檢查strace
輸出,我們可以看到它寫的字符串:
write(1, "IcmpMsg:\n InType0: 11\n InT"..., 373IcmpMsg:
InType0: 11
好吧,那很有趣。讓我們來看看男人頁netstat
:
man netstat
如果你看看FILES
下:
FILES
/etc/services -- The services translation file
/proc -- Mount point for the proc filesystem, which gives access to kernel status information via the following files.
/proc/net/dev -- device information
/proc/net/raw -- raw socket information
/proc/net/tcp -- TCP socket information
/proc/net/udp -- UDP socket information
/proc/net/igmp -- IGMP multicast information
...
你可以看到爲什麼它open
版,並從上述read
。在搜索「清除」或「重置」(或閱讀它)時,您會發現這些不是該命令的選項。
下一步將檢查man proc
,它將自己描述爲「過程信息僞文件系統」。
從這裏,你可以得到這樣的想法,如果你修改了netstat讀取的文件,你可以改變netstat的輸出(在我看來,/proc/net/netstat
看起來特別有趣) - 而且你可以 - 但是我會建議讓它只讀。
我喜歡這個很聰明的「逆向工程」類方法 – Marged