{"id":45749,"date":"2019-05-30T16:42:17","date_gmt":"2019-05-30T08:42:17","guid":{"rendered":"http:\/\/www.jiloc.com\/?p=45749"},"modified":"2019-06-08T10:25:07","modified_gmt":"2019-06-08T02:25:07","slug":"php%e8%84%9a%e6%9c%ac%e5%ae%9a%e6%97%b6%e7%9b%91%e6%8e%a7%e4%ba%a4%e6%8d%a2%e6%9c%ba%e7%ab%af%e5%8f%a3%e6%b5%81%e9%87%8f%e5%b9%b6%e6%b7%bb%e5%8a%a0%e5%88%a0%e9%99%a4%e4%bf%ae%e6%94%b9%e8%a7%84","status":"publish","type":"post","link":"http:\/\/jiloc.com\/45749.html","title":{"rendered":"Linux\u7cfb\u7edf\u4e2d\u4f7f\u7528PHP\u811a\u672c\u5b9a\u65f6\u76d1\u63a7\u4ea4\u6362\u673a\u7aef\u53e3\u6d41\u91cf\u5e76\u6dfb\u52a0\u5220\u9664\u4fee\u6539\u4ea4\u6362\u673a\u89c4\u5219\u63a7\u5236\u6d41\u91cf"},"content":{"rendered":"\n
\u4eca\u65e5\u5728\u516c\u53f8\u9879\u76ee\u4e2d\u7528\u5230\u4e86\u81ea\u52a8\u8fd0\u7ef4\u7684\u811a\u672c\uff0c\u7528\u6765\u6bcf\u5206\u949f\u6267\u884cphp\u811a\u672c\u76d1\u63a7\u4ea4\u6362\u673a\uff0c\u5982\u679c\u4ea4\u6362\u673a\u6d41\u91cf\u8fc7\u5927\u5219\u6dfb\u52a0\u51fa\u53e3\uff0c\u5982\u679c\u8fc7\u5c0f\u5219\u51cf\u5c11\u51fa\u53e3\u3002\u7528\u5230\u4e86\u4e00\u4e9b\u6280\u672f\u6027\u7684\u4e1c\u897f\u3002<\/p>\n\n\n\n
\u5177\u4f53\u4ee3\u7801\u5b9e\u4f8b\u5982\u4e0b\uff1a<\/p>\n\n\n\n
<?php\n\/**********************************************\n * \u76d1\u542c\u4ea4\u6362\u673a\u7aef\u53e3\u6d41\u91cf\u5e76\u5207\u6362\u89c4\u5219\n * \u5f53\u7aef\u53e3\u6d41\u91cf\u5927\u4e8e\u9600\u503c\u5219\u987a\u5e8f\u6267\u884cA\u7cfb\u5217\u547d\u4ee4\n * \u5f53\u7aef\u53e3\u6d41\u91cf\u5c0f\u4e8e\u9600\u503c\u5219\u5012\u5e8f\u6267\u884cB\u7cfb\u5217\u547d\u4ee4\n * Author\uff1aJerry\n * EMail : admin#laoji.org\n * Data \uff1a2019\/5\/30\n ***********************************************\/\n\/\/ \u5f00\u59cb\u8fd0\u884c\u811a\u672c\u9884\u8f93\u51fa\n$stime=microtime(true); \necho str_repeat('-', 120).PHP_EOL;\nini_set('date.timezone','Asia\/Shanghai');\necho '\u5f53\u524d\u65f6\u95f4\uff1a'.date(\"Y-m-d H:i:s\").PHP_EOL;\n\/\/ \u6267\u884c\u547d\u4ee4\u5f97\u51fa\u7aef\u53e3\u6d41\u91cf\u503c\n$cmd = '\/usr\/bin\/snmpwalk -v2c -c power@idc 192.168.108.108 1.3.6.1.2.1.31.1.1.1.10.5';\n\/\/ \u6d41\u91cf\u9600\u503c\n$valve = '1000';\n\n\/\/ \u4ea4\u6362\u673a\u4fe1\u606f\u914d\u7f6e\n$ip = '192.168.108.108';\n$port = '23';\n$user = 'puer';\n$passwd = 'puer123';\n\n\n\/\/ \u547d\u4ee4\u96c6\uff0ccmdA \u6dfb\u52a0\u89c4\u5219\u96c6\uff0ccmdD\u5220\u9664\u89c4\u5219\u96c6\n$cmdA = array(\n array( 'ip route-static vpn-instance baishanyun2041 0.0.0.0 0.0.0.0 192.168.108.137 public description UPLINK-20180525',\n 'ip route-static vpn-instance baishanyun2041 0.0.0.0 0.0.0.0 192.168.108.141 public description UPLINK-20180525'\n ),\n array( 'ip route-static vpn-instance baishanyun1029 0.0.0.0 0.0.0.0 192.168.108.137 public description UPLINK-20180525',\n 'ip route-static vpn-instance baishanyun1029 0.0.0.0 0.0.0.0 192.168.108.141 public description UPLINK-20180525'\n ),\n array( 'ip route-static vpn-instance baishanyun1030 0.0.0.0 0.0.0.0 192.168.108.137 public description UPLINK-20180525',\n 'ip route-static vpn-instance baishanyun1030 0.0.0.0 0.0.0.0 192.168.108.141 public description UPLINK-20180525'\n ),\n array( 'ip route-static vpn-instance baishanyun1033 0.0.0.0 0.0.0.0 192.168.108.137 public description UPLINK-20180525',\n 'ip route-static vpn-instance baishanyun1033 0.0.0.0 0.0.0.0 192.168.108.141 public description UPLINK-20180525'\n ) \n);\n$cmdD = array(\n array( 'UNDO ip route-static vpn-instance baishanyun2041 0.0.0.0 0.0.0.0 192.168.108.137 public',\n 'UNDO ip route-static vpn-instance baishanyun2041 0.0.0.0 0.0.0.0 192.168.108.141 public'\n ),\n array( 'UNDO ip route-static vpn-instance baishanyun1029 0.0.0.0 0.0.0.0 192.168.108.137 public',\n 'UNDO ip route-static vpn-instance baishanyun1029 0.0.0.0 0.0.0.0 192.168.108.141 public'\n ),\n array( 'UNDO ip route-static vpn-instance baishanyun1030 0.0.0.0 0.0.0.0 192.168.108.137 public',\n 'UNDO ip route-static vpn-instance baishanyun1030 0.0.0.0 0.0.0.0 192.168.108.141 public'\n ),\n array( 'UNDO ip route-static vpn-instance baishanyun1033 0.0.0.0 0.0.0.0 192.168.108.137 public',\n 'UNDO ip route-static vpn-instance baishanyun1033 0.0.0.0 0.0.0.0 192.168.108.141 public'\n ),\n);\n\n\n\n\/\/ \u83b7\u53d6\u5f53\u524d\u6d41\u91cf\u503c\n$return = explode(':', shell_exec($cmd) );\n$traffic = trim($return[count($return) - 1]);\n\n\n\/\/ \u5f00\u59cb\u767b\u5f55\u4ea4\u6362\u673a\n$telnet = new telnet(\"{$ip}\", \"{$port}\");\necho $telnet->read_till(\"login: \");\n$telnet->write(\"{$user}\\n\");\necho $telnet->read_till(\"password: \");\n$telnet->write(\"{$passwd}\\n\");\necho $telnet->read_till(\">\");\n\/\/echo $telnet->read_till(\":> \");\n$telnet->write(\"sys\\n\");\necho $telnet->read_till(\"]\");\n$telnet->write(\"dis this | inc ip route-static vpn-instance baishanyun\\n\");\necho $config = $tmp = $telnet->read_till(\"]\");\n\/\/ \u83b7\u53d6\u4ea4\u6362\u673a\u5168\u90e8\u914d\u7f6e\nwhile( strpos($tmp,'---- More ----') !== false ){\n $telnet->write(\" \\n\"); \n echo $config .= $tmp = $telnet->read_till(\"]\");\n}\n\n$traffic = '2000';\n$needCommit = 0 ;\n$cmdAry = array();\n$return = '';\nif( $traffic >= $valve){\/\/\u6d41\u91cf\u5927\u4e8e\u9600\u503c\n $return .= '\u6d41\u91cf\u5927\u4e8e\u9600\u503c'.PHP_EOL;\n $cmdAry = $cmdA;\n for($i=0;$i<count($cmdAry);$i++){\n for( $j=0;$j<count($cmdAry[$i]);$j++){\n if(strpos($config, $cmdAry[$i][$j]) !== false ){\n $return .= '\u89c4\u5219\u5df2\u5b58\u5728'.$j.'#'.$i.'\uff1a'.$cmdAry[$i][$j].PHP_EOL;\n }else{\n echo $telnet->write($cmdAry[$i][$j].\"\\n\");\n echo $telnet->read_till(\"]\");\n $needCommit = 1;\n $return .= '\u89c4\u5219\u5df2\u5199\u5165'.$j.'#'.$i.'\uff1a'.$cmdAry[$i][$j].PHP_EOL;\n if( $j == (count($cmdAry[$i])-1)){ \n break 2;\n }\n \n }\n } \n } \n}else{\n $return .= '\u6d41\u91cf\u5c0f\u4e8e\u9600\u503c'.PHP_EOL;\n $cmdAry = $cmdD;\n $num = count( $cmdAry ) - 1;\n for( $i=$num;$i>=0;$i--){\n for( $j=0;$j<count($cmdAry[$i]);$j++){\n if( strpos($config, str_replace('UNDO ', '', $cmdAry[$i][$j])) !== false ){\n $telnet->write($cmdAry[$i][$j].\"\\n\");\n echo $telnet->read_till(\"]\"); \n $needCommit = '1';\n $return .= '\u89c4\u5219\u9700\u5220\u9664'.$j.'#.'.$i.'\uff1a'.$cmdAry[$i][$j].PHP_EOL; \n if( $j == (count($cmdAry[$i])-1) ){\n $goBreak = 1;\n break 2;\n }\n }else{\n $return .= '\u6ca1\u6709\u5339\u914d\u5230\u89c4\u5219'.$j.'#'.$i.'\uff1a'.$cmdAry[$i][$j].PHP_EOL;\n }\n \n }\n }\n}\n\/\/ \u63d0\u4ea4commit\u751f\u6548\nif( $needCommit ){\n $telnet->write(\"commit\\n\");\n echo $telnet->read_till(']');\n $return .= '\u89c4\u5219\u5df2commit'.PHP_EOL;\n}\n \n \n\necho $telnet->close();\necho $return;\n\n\n\nclass Telnet {\n var $sock = NULL;\n\n function telnet($host,$port) {\n $this->sock = fsockopen($host,$port);\n socket_set_timeout($this->sock,2,0);\n }\n\n function close() {\n if ($this->sock) fclose($this->sock);\n $this->sock = NULL;\n }\n\n function write($buffer) {\n $buffer = str_replace(chr(255),chr(255).chr(255),$buffer);\n fwrite($this->sock,$buffer);\n }\n\n function getc() {\n return fgetc($this->sock);\n }\n\n function read_till($what) {\n $buf = '';\n while (1) {\n $IAC = chr(255);\n \n $DONT = chr(254);\n $DO = chr(253);\n \n $WONT = chr(252);\n $WILL = chr(251);\n \n $theNULL = chr(0);\n\n $c = $this->getc();\n \n if ($c === false) return $buf;\n if ($c == $theNULL) {\n continue;\n }\n\n \/\/ if ($c == \"1\") {\n \/\/ continue;\n \/\/ }\n\n if ($c != $IAC) {\n $buf .= $c;\n\n if ($what == (substr($buf,strlen($buf)-strlen($what)))) {\n return $buf;\n }\n else {\n continue;\n }\n }\n\n $c = $this->getc();\n \n if ($c == $IAC) {\n $buf .= $c;\n }\n else if (($c == $DO) || ($c == $DONT)) {\n $opt = $this->getc();\n \/\/ echo \"we wont \".ord($opt).\"\\n\";\n fwrite($this->sock,$IAC.$WONT.$opt);\n }\n elseif (($c == $WILL) || ($c == $WONT)) {\n $opt = $this->getc();\n \/\/ echo \"we dont \".ord($opt).\"\\n\";\n fwrite($this->sock,$IAC.$DONT.$opt);\n }\n else {\n \/\/ echo \"where are we? c=\".ord($c).\"\\n\";\n }\n }\n }\n}\n\n\n\n$etime=microtime(true);\/\/\u83b7\u53d6\u7a0b\u5e8f\u6267\u884c\u7ed3\u675f\u7684\u65f6\u95f4\n$total=$etime-$stime; \/\/\u8ba1\u7b97\u5dee\u503c\necho PHP_EOL.\"\u6267\u884c\u65f6\u95f4\uff1a{$total} \u79d2\".PHP_EOL;<\/code><\/pre>\n\n\n\n\u811a\u672c\u4e2d\u4f1a\u81ea\u52a8\u8bfb\u53d6\u4ea4\u6362\u673a\u5f53\u524d\u914d\u7f6e\uff0c\u5e76\u4e14\u6839\u636e ---- More ----<\/code> \u81ea\u52a8\u8f93\u5165\u7a7a\u683c\u5206\u5c4f\u83b7\u53d6\u5168\u90e8\u914d\u7f6e\u3002\u672c\u9700\u6c42\u4e2dcmdA\u6309\u987a\u5e8f\u6267\u884c\uff0ccmdD\u5219\u6309\u5012\u5e8f\u6267\u884c\u3002<\/p>\n\n\n\n