양말5 프록시 server_php 팁을 구현하는 100줄의 PHP 코드
이틀 전 B사이트에서 매끄러운 그래픽으로 LOL을 플레이할 수 있는 컴퓨터 조립 비용으로 100위안을 요구하는 남자를 보았는데 문득 코드 100줄이면 (단순히) 뭔가 재미있는 일을 이룰 수 있다는 생각이 들었습니다. 저는 주로 PHP 개발을 하고 있어서 이런 글을 보게 되었습니다.
물론 PHP(Swoole Extension은 포함하지 않음) 자체는 네트워크 서버 프로그래밍에 능숙하지 않기 때문에 이 에이전트는 단지 장난감에 불과하며 일상적인 사용과는 조금 거리가 있습니다. 안정적이고 신뢰할 수 있는 암호화된(인터넷 서핑 방법을 배울 수 있도록) 프록시를 사용하려면 다음을 사용할 수 있습니다: https://github.com/momaer/asocks-go또한 100이 걸립니다. go를 사용하여 구현할 코드 라인.
집필 과정에서 PHP 멀티스레딩이 여전히 어렵다는 것을 알게 되었습니다. 예를 들어, 각 연결마다 새 스레드를 만들고 싶었습니다. 하지만 이 스레드는 공식 예의 다음과 같이 저장되어야 합니다(예: 배열에 저장). https://github.com/krakjoe/pthreads/blob/master/examples/SocketServer.php $clients 배열에 배치해야 합니다. 그렇지 않으면 시도(curl -L 301이 필요한 주소)하면 무슨 일이 일어나는지 알 수 있습니다.
이 예는 실제 세계에서 실행되지 않는 클라이언트가 삭제되도록 여기에서 작업을 수행한다고 설명하지만 더 이상 실행되지 않는 연결을 삭제하는 방법에 대해서는 설명하지 않습니다. 친절. $clients를 클래스에 넣고 클래스를 스레드 클래스에 전달한 다음 스레드 클래스가 끝나려고 할 때 $clients에서 해당 연결을 설정 해제하려고 시도했지만 소용이 없었습니다.
그러면 다음은 스레드 풀을 사용하여 구현된 프록시입니다. 논리적으로 말하면 종료할 때 풀을 종료()해야 하고 모니터링 소켓도 종료해야 합니다. 하지만 수백 줄의 코드가 있습니다. 강제로 실행할 필요는 없습니다. Ctrl c를 사용하면 운영 체제에서 리소스를 회수할 수 있습니다.
PHP가 네트워크 프로그래밍을 잘 못하는 이유는 무엇인가요? 우선, stream_socket_XXX 관련 함수를 사용해봤습니다. 소켓 확장을 사용하면 어떨까요? 소켓 확장에 문제가 있으므로 다음을 참조하세요. https://github.com/krakjoe/pthreads/issues/581 stream_socket_recvfrom과 같은 고급 작업에서는 stream_set_timeout이 작동하지 않습니다. , 참조: http://php.net/manual/en/function.stream-set-timeout.php 프록시를 작성할 때 이러한 사항을 고려해야 합니다. 예를 들어, 원격 대상 서버에 연결할 때 시간 초과 제어가 없으며 스레드 풀이 쉽게 가득 찰 수 있습니다.
테스트에는 그냥 컬을 사용하세요. 그런데 현재는 원격 DNS 해상도만 지원됩니다. 이유는 무엇입니까? 이 장난감은 나중에 인터넷에 액세스하는 데 사용해야 하기 때문에: 컬 --socks5-hostname 127.0.0.1:1080 http://ip.cn
Class Pipe extends Threaded { private $client; private $remote; public function __construct($client, $remote) { $this->client = $client; $this->remote = $remote; } public function run() { for ( ; ; ) { $data = stream_socket_recvfrom($this->client, 4096); if ($data === false || strlen($data) === 0) { break; } $sendBytes = stream_socket_sendto($this->remote, $data); if ($sendBytes <= 0) { break; } } stream_socket_shutdown($this->client, STREAM_SHUT_RD); stream_socket_shutdown($this->remote, STREAM_SHUT_WR); } } Class Client extends Threaded { public $fd; public function __construct($fd) { $this->fd = $fd; } public function run() { $data = stream_socket_recvfrom($this->fd, 2); $data = unpack('c*', $data); if ($data[1] !== 0x05) { stream_socket_shutdown($this->fd, STREAM_SHUT_RDWR); echo '协议不正确.', PHP_EOL; return; } $nmethods = $data[2]; $data = stream_socket_recvfrom($this->fd, $nmethods); stream_socket_sendto($this->fd, "\x05\x00"); $data = stream_socket_recvfrom($this->fd, 4); $data = unpack('c*', $data); $addressType = $data[4]; if ($addressType === 0x03) { // domain $domainLength = unpack('c', stream_socket_recvfrom($this->fd, 1))[1]; $data = stream_socket_recvfrom($this->fd, $domainLength + 2); $domain = substr($data, 0, $domainLength); $port = unpack("n", substr($data, -2))[1]; } else { stream_socket_shutdown($this->fd, STREAM_SHUT_RDWR); echo '请使用远程dns解析.', PHP_EOL; } stream_socket_sendto($this->fd, "\x05\x00\x00\x01\x00\x00\x00\x00\x00\x00"); echo "{$domain}:{$port}", PHP_EOL; $remote = stream_socket_client("tcp://{$domain}:{$port}"); if ($remote === false) { stream_socket_shutdown($this->fd, STREAM_SHUT_RDWR); return; } $pool = $this->worker->pipePool; $pipe1 = new Pipe($remote, $this->fd); $pipe2 = new Pipe($this->fd, $remote); $pool->submit($pipe1); $pool->submit($pipe2); } } class ProxyWorker extends Worker { public $pipePool; public function __construct($pipePool) { $this->pipePool = $pipePool; } } $server = stream_socket_server('tcp://0.0.0.0:1080', $errno, $errstr); if ($server === false) exit($errstr); $pipePool = new Pool(200, Worker::class); $pool = new Pool(50, 'ProxyWorker', [$pipePool]); for( ; ; ) { $fd = @stream_socket_accept($server, 60); if ($fd === false) continue; $pool->submit(new Client($fd)); }

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Alipay PHP ...

JWT는 주로 신분증 인증 및 정보 교환을 위해 당사자간에 정보를 안전하게 전송하는 데 사용되는 JSON을 기반으로 한 개방형 표준입니다. 1. JWT는 헤더, 페이로드 및 서명의 세 부분으로 구성됩니다. 2. JWT의 작업 원칙에는 세 가지 단계가 포함됩니다. JWT 생성, JWT 확인 및 Parsing Payload. 3. PHP에서 인증에 JWT를 사용하면 JWT를 생성하고 확인할 수 있으며 사용자 역할 및 권한 정보가 고급 사용에 포함될 수 있습니다. 4. 일반적인 오류에는 서명 검증 실패, 토큰 만료 및 대형 페이로드가 포함됩니다. 디버깅 기술에는 디버깅 도구 및 로깅 사용이 포함됩니다. 5. 성능 최적화 및 모범 사례에는 적절한 시그니처 알고리즘 사용, 타당성 기간 설정 합리적,

기사는 PHP 5.3에 도입 된 PHP의 LSB (Late STATIC BING)에 대해 논의하여 정적 방법의 런타임 해상도가보다 유연한 상속을 요구할 수있게한다. LSB의 실제 응용 프로그램 및 잠재적 성능

기사는 입력 유효성 검사, 인증 및 정기 업데이트를 포함한 취약점을 방지하기 위해 프레임 워크의 필수 보안 기능을 논의합니다.

PHP 개발에서 PHP의 CURL 라이브러리를 사용하여 JSON 데이터를 보내면 종종 외부 API와 상호 작용해야합니다. 일반적인 방법 중 하나는 컬 라이브러리를 사용하여 게시물을 보내는 것입니다 ...

PHP 개발에서 견고한 원칙의 적용에는 다음이 포함됩니다. 1. 단일 책임 원칙 (SRP) : 각 클래스는 하나의 기능 만 담당합니다. 2. Open and Close Principle (OCP) : 변경은 수정보다는 확장을 통해 달성됩니다. 3. Lisch의 대체 원칙 (LSP) : 서브 클래스는 프로그램 정확도에 영향을 미치지 않고 기본 클래스를 대체 할 수 있습니다. 4. 인터페이스 격리 원리 (ISP) : 의존성 및 사용되지 않은 방법을 피하기 위해 세밀한 인터페이스를 사용하십시오. 5. 의존성 반전 원리 (DIP) : 높고 낮은 수준의 모듈은 추상화에 의존하며 종속성 주입을 통해 구현됩니다.

이 기사에서는 프레임 워크에 사용자 정의 기능 추가, 아키텍처 이해, 확장 지점 식별 및 통합 및 디버깅을위한 모범 사례에 중점을 둡니다.

세션 납치는 다음 단계를 통해 달성 할 수 있습니다. 1. 세션 ID를 얻으십시오. 2. 세션 ID 사용, 3. 세션을 활성 상태로 유지하십시오. PHP에서 세션 납치를 방지하는 방법에는 다음이 포함됩니다. 1. 세션 _regenerate_id () 함수를 사용하여 세션 ID를 재생산합니다. 2. 데이터베이스를 통해 세션 데이터를 저장하십시오.
