• 通过web php 执行shell脚本,获取的结果与直接在命令行下获取的结果不同。


    公司项目中的一项小功能,统计设备的连接数。其中用到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的内容。
     
    问题是解决了,但具体怎么产生的这个问题,具体原因是什么。还没有弄清楚。还待后续研究中...
     
     
     
     
  • 相关阅读:
    js的innerHTML和jquery的html
    CLR_via_C#.3rd 翻译[25.8 使用线程的理由]
    销魂睡姿16式
    CLR_via_C#.3rd 笔记[25.10 前台线程和后台线程]
    NHibernate Reading NotesBasic ConceptⅡ
    CLR_via_C#.3rd 翻译[25.6 CLR线程和windows线程]
    CLR_via_C#.3rd 翻译[25.4 CPU趋势 ]
    NHibernate Reading NotesBasic ConceptⅠ
    JQuery笔记Ⅰ朦胧篇
    NH菜鸟笔记Ⅰ
  • 原文地址:https://www.cnblogs.com/wanhl/p/3604785.html
Copyright © 2020-2023  润新知