公司項目中的一項小功能,統計設備的連接數。其中用到shell腳本來獲取已連接設備的統計。使用命令
/
bin
/
netstat
-
an
|
grep ESTABLISHED
|
awk
'{print $4}'
|
cut
-
d
:
-
f1
|
sort
|
uniq
-
c
在linux命令行下執行獲取到的結果為
2 192.168.0.135
而通過web 頁面用php 的exec 函數來執行,獲得結果是這樣的:
1
2 192.168.0.135
php 腳本如下:
<
?
php
exec (
"cat /dev/null > /tmp/res.log"
) ;
// exec ("/bin/netstat -an | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c ", $re);
exec (
"/bin/netstat -an | grep ESTABLISHED "
, $re);
foreach
($re
as
$re1)
{
echo
$re1.
"<br>"
;
}
echo
"Over<br>"
;
?
>
百思不得其解,后來在web端只執行
/bin/netstat -an | grep ESTABLISHED
來查看,獲得接過分別如:
linux命令行下:
tcp 0 0 192.168.0.1:22 192.168.0.135:50598 ESTABLISHED
tcp 0 0 192.168.0.1:22 192.168.0.135:60212 ESTABLISHED
tcp 0 0 192.168.0.1:22 192.168.0.135:50934 ESTABLISHED
php web頁面結果如下:
tcp 0 0 192.168.0.1:22 192.168.0.135:50598 ESTABLISHED
tcp 0 0 192.168.0.1:22 192.168.0.135:60212 ESTABLISHED
tcp 0 0 192.168.0.1:22 192.168.0.135:50934 ESTABLISHED
tcp 0 0 ::ffff:192.168.0.1:80 ::ffff:192.168.0.135:56387 ESTABLISHED
兩種結果不一樣了,通過web頁面執行的多出來一條(如上面紅色部分)。是Ipv6+v4地址的一種寫法。即v6和v4的結果都統計出來了。
解決辦法
/
bin
/
netstat
-
an -A inet
|
grep ESTABLISHED
|
awk
'{print $4}'
|
cut
-
d
:
-
f1
|
sort
|
uniq
-
c
指定使用協議為 inet 即不包括ipv6的內容。
問題是解決了,但具體怎么產生的這個問題,具體原因是什么。還沒有弄清楚。還待后續研究中...