2015-10-15 89 views
-1

在我的Linux服務器當我運行netstat -su我能UDP報文的統計數據是這樣的:在Linux中,netstat -su命令獲取統計信息?

netstat -su 
IcmpMsg: 
    InType0: 10827 
    InType3: 42792 
    InType8: 298795 
    InType13: 2 
    OutType0: 298795 
    OutType3: 328120 
    OutType8: 10827 
    OutType14: 2 
Udp: 
    232862733 packets received 
    12074334 packets to unknown port received. 
    555474 packet receive errors 
    8650718 packets sent 
UdpLite: IpExt: 
    InBcastPkts: 375 
    InOctets: 169855997552 
    OutOctets: 60497003017 
    InBcastOctets: 144080 

哪裏netstat命令從得到這些統計數字?我可以清除緩衝區以使它們從零開始?

回答

5

你可以在不離開你的終端的情況下找到這些東西的答案。

讓我們來看看自己:

# 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看起來特別有趣) - 而且你可以 - 但是我會建議讓它只讀。

+1

我喜歡這個很聰明的「逆向工程」類方法 – Marged

1

計數器被設計爲不被重置作爲一項規則,如果它們被重置,它將失去作爲計數器的目的。計數器的要點是數據的使用者可以輪詢它們並計算速率,或者計算自某個時間以前的增量,但輪詢的頻率並不重要。數據可能會有很多不同的消費者,如果計數器發生故障(可以說零),則消費者可以丟棄數據時間段或假定他們已經翻身(可能導致錯誤報告)。 (例如,運行腳本獲取統計數據,查看其當前值,並提供扣除這些初始值的後續讀數)。