亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

100多行PHP代碼實現socks5代理服務器[2]

2024-05-04 23:45:32
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了100多行PHP代碼實現socks5代理服務器,需要的朋友可以參考下
 
100多行PHP代碼實現socks5代理服務器,這次是使用swoole純異步來寫,使用狀態機來處理數據。目前用它訪問開源中國木有壓力,但訪問網易新聞就壓力山大。我發現我用別的語言寫得代理,訪問網易新聞都壓力大。嘎嘎,學藝不精。

對swoole理解不深,不知道怎么處理socket shutdown只關閉讀/寫這樣,還有就是連接超時,讀寫超時這種怎么處理。在網上看到作者說要用定時器,感覺好麻煩,所以,這次的代理,雖然個人用,一般不會有什么問題,但離產品級的代理,還有段路要走。

如果要利用多核,就使用process模式,設置worker個數為cpu數量即可。
<?phpclass Client{ public $connected = true; public $data = ''; public $remote = null; public $status = 0;}class Server{ public $clients = []; public function start() {  $server = new swoole_server('0.0.0.0', 8388, SWOOLE_BASE, SWOOLE_SOCK_TCP);  $server->set([   'max_conn' => 1000,    'daemonize' => 1,   'reactor_num' => 1,   'worker_num' => 1,   'dispatch_mode' => 2,   'buffer_output_size' => 128 * 1024 * 1024,   'open_cpu_affinity' => 1,   'open_tcp_nodelay' => 1,   'log_file' => 'socks5_server.log',  ]);  $server->on('connect', [$this, 'onConnect']);  $server->on('receive', [$this, 'onReceive']);  $server->on('close', [$this, 'onClose']);  $server->start(); } public function onConnect($server, $fd, $fromID) {  $this->clients[$fd] = new Client(); } public function onReceive($server, $fd, $fromID, $data) {  ($this->clients[$fd])->data .= $data;  $this->parse($server, $fd);  } public function onClose($server, $fd, $fromID) {  $client = $this->clients[$fd];  $client->connected = false; } private function parse($server, $fd)  {  $client = $this->clients[$fd];  switch ($client->status) {   case 0: {    if (strlen($client->data) >= 2) {     $request = unpack('c*', substr($client->data, 0, 2));     if ($request[1] !== 0x05) {      echo '協議不正確:' . $request[1], PHP_EOL;      $server->close($fd);      break;     }     $nmethods = $request[2];     if (strlen($client->data) >= 2 + $nmethods) {      $client->data = substr($client->data, 2 + $nmethods);      $server->send($fd, "/x05/x00");      $client->status = 1;     }    }   }   case 1: {    if (strlen($client->data) < 5)     break;    $request = unpack('c*', $client->data);    $aType = $request[4];    if ($aType === 0x03) { // domain     $domainLen = $request[5];     if (strlen($client->data) < 5 + $domainLen + 2) {       break;      }     $domain = substr($client->data, 5, $domainLen);     $port = unpack('n', substr($client->data, 5 + $domainLen, 2))[1];      $client->data = substr($client->data, 5 + $domainLen + 2);    } else if ($aType === 0x01) { // ipv4     $domain = long2ip(unpack('N', substr($client->data, 4, 4))[1]);     $port = unpack('n', substr($client->data, 8, 2))[1];      $client->data = substr($client->data, 10);    } else {     echo '不支持的atype:' . $aType, PHP_EOL;     $server->close($fd);     break;    }    $remote = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);    $remote->on('connect', function($cli) use($client, $server, $fd, $remote) {     $server->send($fd, "/x05/x00/x00/x01/x00/x00/x00/x00/x00/x00");     $client->status = 2;     $client->remote = $remote;    });    $remote->on("error", function(swoole_client $cli) use($server, $fd) {     //$server->send($fd, ""); // todo 連接不上remote     echo 'connect to remote error.', PHP_EOL;     $server->close($fd);    });    $remote->on('receive', function($cli, $data) use($server, $fd, $client) {     if (!$client->connected) {      echo 'connection has been closed.', PHP_EOL;      return;     }     $server->send($fd, $data);    });    $remote->on('close', function($cli) use($server, $fd, $client) {     $client->remote = null;    });    if ($aType === 0x03) {     swoole_async_dns_lookup($domain, function($host, $ip) use($remote, $port, $server, $fd) {      //todo 當host為空時的處理。貌似不存在的域名都解析成了本機的外網ip,奇怪      if (empty($ip) || empty($host)) {       echo "host:{$host}, ip:{$ip}/n";       $server->close($fd);       return;      }      $remote->connect($ip, $port);     });    } else {     $remote->connect($domain, $port);    }   }   case 2: {    if (strlen($client->data) === 0) {     break;    }    if ($client->remote === null) {     echo 'remote connection has been closed.', PHP_EOL;     break;    }    $sendByteCount = $client->remote->send($client->data);    if ($sendByteCount === false || $sendByteCount < strlen($client->data)) {     echo 'data length:' , strlen($client->data), ' send byte count:', $sendByteCount, PHP_EOL;      echo $client->data, PHP_EOL;     $server->close($fd);     }    $client->data = '';   }  } }}(new Server())->start();


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色综合久久天天综线观看| 555www成人网| 性色av一区二区三区免费| 2020久久国产精品| 国产美女久久精品| 亚洲精品国产拍免费91在线| 国产精品美女免费| 久久亚洲精品网站| 国产亚洲福利一区| 国产精品www| 精品中文字幕在线观看| 亚洲国产成人精品一区二区| 国产欧美日韩综合精品| 美女性感视频久久久| www.日韩av.com| 午夜剧场成人观在线视频免费观看| 尤物精品国产第一福利三区| 黑人极品videos精品欧美裸| 国产日韩中文字幕| 日韩免费在线播放| 亚洲国产成人精品久久| 日韩av片免费在线观看| 精品高清美女精品国产区| 亚洲人成网站999久久久综合| 国产a∨精品一区二区三区不卡| 精品久久久久久中文字幕大豆网| 国产一区二区三区视频免费| 成人在线播放av| 欧美在线视频免费播放| 97久久精品人搡人人玩| 97超级碰在线看视频免费在线看| 国外成人免费在线播放| 国产色视频一区| 日韩精品www| 亚洲精品久久久久久久久久久| 国产精品video| 在线精品国产成人综合| 国产91对白在线播放| 疯狂蹂躏欧美一区二区精品| 国产精品视频xxx| 91精品国产自产在线| 国产精品久久久久秋霞鲁丝| 国产区精品在线观看| 在线电影中文日韩| 亚洲国产成人精品电影| 精品露脸国产偷人在视频| 欧美极品美女视频网站在线观看免费| 亚洲摸下面视频| 2018日韩中文字幕| 亚洲国产精品大全| 日韩在线国产精品| 亚洲精品久久久久久下一站| 深夜福利国产精品| 欧美一区亚洲一区| 视频在线观看99| 亚洲成人动漫在线播放| 精品成人69xx.xyz| 欧美在线一区二区视频| 国产综合在线观看视频| 欧美精品亚州精品| 久久久久国产精品一区| 亚洲免费小视频| 538国产精品一区二区免费视频| 一区二区欧美激情| 国产精品视频一区国模私拍| 亚洲最大中文字幕| 久久久久久有精品国产| 国产精品成人一区| 欧美一区二区三区免费视| 亚洲美女又黄又爽在线观看| 亚洲天堂成人在线视频| 亚洲综合视频1区| 国产婷婷色综合av蜜臀av| 中文字幕亚洲色图| 日韩视频欧美视频| 国产精品久久久久久久9999| 亚洲欧洲视频在线| 按摩亚洲人久久| 4438全国亚洲精品在线观看视频| 亚洲一区二区少妇| 欧美成人精品一区二区| 国产成人小视频在线观看| 精品国产老师黑色丝袜高跟鞋| 一本色道久久88精品综合| 午夜精品一区二区三区在线视频| 日韩欧美成人网| 国产精品福利小视频| 欧美大肥婆大肥bbbbb| 国产成人极品视频| 国产精品一区电影| 日韩最新中文字幕电影免费看| 久久精品亚洲94久久精品| 日韩av综合中文字幕| 97精品久久久中文字幕免费| 亚洲国产精品成人va在线观看| 亚洲乱码国产乱码精品精天堂| 欧美在线播放视频| 最近中文字幕mv在线一区二区三区四区| 影音先锋欧美在线资源| 国产又爽又黄的激情精品视频| 亚洲xxxx18| 91亚洲午夜在线| 久久99精品国产99久久6尤物| 日韩在线视频线视频免费网站| 欧美日韩国产成人高清视频| 中文字幕精品网| 日韩视频中文字幕| 91精品视频专区| 日韩在线精品一区| 欧美在线视频a| 97久久久久久| 亚洲午夜精品久久久久久久久久久久| 91在线观看免费观看| 日韩欧美精品网址| 精品国偷自产在线| 成人国产精品一区| 亚洲第一精品久久忘忧草社区| 亚洲乱码一区二区| 日韩中文字幕视频在线观看| 国产手机视频精品| 免费91在线视频| 亚洲午夜激情免费视频| 在线视频中文亚洲| 亚洲免费视频观看| 亚洲成人黄色网址| 亚洲人成在线免费观看| 亚洲精品大尺度| 成人字幕网zmw| 国产精品一区二区av影院萌芽| 亚洲男人的天堂在线| 亚洲性夜色噜噜噜7777| 久久高清视频免费| 日韩一区二区久久久| 国产91精品久久久久| 亚洲综合在线小说| 成人精品视频在线| 久久av红桃一区二区小说| 国产精品久久综合av爱欲tv| 热久久美女精品天天吊色| 欧美丰满少妇xxxxx| 欧美丝袜美女中出在线| 亚洲男女自偷自拍图片另类| 日韩精品高清在线| 疯狂欧美牲乱大交777| 国产欧美最新羞羞视频在线观看| 国产精品揄拍500视频| 4438全国亚洲精品在线观看视频| 国产精品日本精品| 正在播放欧美一区| 欧美裸体男粗大视频在线观看| 欧美一级电影免费在线观看| 久久久久久中文| 98精品国产自产在线观看| 久久国产天堂福利天堂| 国产精品男人的天堂| 91美女片黄在线观看游戏| 中文字幕亚洲一区在线观看| 色999日韩欧美国产| 亚洲成人久久网| 人体精品一二三区| 国产精品入口免费视频一| 欧美专区日韩视频| 在线电影欧美日韩一区二区私密| 国产视频久久久|