2015-07-06 31 views
11

Tôi đang làm việc trên thư viện hiện có và tôi muốn thiết lập kết nối với ổ cắm chỉ qua proxy. đang hiện hành làKết nối Ổ cắm PHP Qua Proxy

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
$result = socket_connect($socket, "www.host.com", 8080); 

đâu tôi muốn kết nối này được thiết lập thông qua proxy (SOCK4/5)

Tôi đã thử với

socket_bind($socket, '127.0.0.1', '9150'); 

Đó là máy chủ vidalia, tôi cũng' đã thử một số proxy từ internet mà đã làm việc trên firefox như vớ nhưng không thể có được mã này kết nối thông qua nó.

Khi tôi thử đặt trên dòng tôi nhận được lỗi sau.

Cảnh báo: socket_bind(): không thể liên kết địa chỉ [10048]: Chỉ sử dụng một địa chỉ của mỗi địa chỉ cổng (giao thức/địa chỉ mạng/cổng).

Trả lời

9

Không muốn xúc phạm bạn nhưng có vẻ như bạn không hiểu khái niệm cơ bản về mạng TCP/IP. Các hàm socket_ sẽ không giúp bạn đối phó với SOCKS proxy vì chúng không có SOCKS client.

Hàm socket_bind() được thiết kế để thiết lập địa chỉ nguồn cho kết nối. Không phải để ràng buộc nó với dịch vụ từ xa. Về cơ bản bạn hướng dẫn ổ cắm của bạn xuất hiện như đến từ 127.0.0.1:9150 và nó phàn nàn như bạn có thể có proxy SOCKS của bạn đang chạy ở đó. Ngay cả khi bạn sẽ có địa chỉ/cổng này, nó sẽ không giúp được gì: bạn không thể kết nối từ localhost ở bất cứ nơi nào khác.

Chỉ sử dụng đúng socket_bind() là sau socket_create() và trước socket_connect() - sau khi kết nối được thiết lập, bạn không thể thay đổi địa chỉ nguồn.

Có vấn đề này bị xóa, hãy để vấn đề của bạn có "thiết lập kết nối đến socket thông qua proxy chỉ". Thành thật mà nói câu hỏi của bạn thực sự mơ hồ về chi tiết: bạn muốn đạt được điều gì? Bạn cần một dòng hoặc bạn chỉ cần gọi một số máy chủ web từ xa với yêu cầu HTTP?

Do sự hiểu lầm của bạn về socket_ và bạn có "www.host.com", 8080 trong câu hỏi của bạn, tôi tin rằng bạn đang tìm kiếm một số trang web được lấy từ www.host.com:8080 thông qua proxy SOCKS. Trong trường hợp này, bạn không cần phải tái tạo lại bánh xe và sử dụng cURL: xem How to use a SOCKS 5 proxy with cURL?

Nếu linh cảm của tôi sai và bạn cần một thư viện bên ngoài sẽ thực hiện nó cho bạn. Không có phần mở rộng PHP chuẩn nào sẽ làm điều này cho bạn. Bạn có thể xem số https://github.com/clue/php-socks để nhận luồng dữ liệu qua SOCKS.

+0

Tôi thực sự appriciate những nỗ lực bạn đã giải thích nhưng bạn có thể xin vui lòng cho tôi cấu trúc dòng chảy hoặc cái gì đó giải thích quá trình này, bất kỳ cách thích hợp để thực hiện những gì tôi đang cố gắng? –

+0

Hãy cho tôi biết những gì bạn đang cố gắng làm chính xác: bạn đang cố gắng truy cập trang web từ xa hoặc bạn cần thiết lập luồng dữ liệu? –

Các vấn đề liên quan