2015-07-06 23 views
11

Sto lavorando su una libreria esistente e voglio che stabilisca la connessione al socket solo tramite proxy. codice attuale èConnessione socket PHP tramite proxy

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

dove voglio questa connessione da stabilire tramite proxy (SOCK4/5)

Ho provato con

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

Quale è il server Vidalia, anche io' Ho provato alcuni proxy da internet che hanno funzionato su firefox come sock ma non sono riusciti a far passare questo codice attraverso di esso.

Quando provo a mettere sopra la riga ho ottenuto l'errore seguente.

Avviso: socket_bind(): impossibile collegare indirizzo [10048]: è consentito un solo utilizzo di ciascun indirizzo socket (protocollo/indirizzo di rete/porta).

risposta

9

Non voglio offenderti ma sembra che tu non capisca le basi del networking TCP/IP. le funzioni socket_ non ti aiuteranno a gestire il proxy SOCKS in quanto non hanno il client SOCKS.

Funzione socket_bind() è progettato per impostare l'indirizzo di origine per la connessione. Non per legarlo al servizio remoto. Fondamentalmente si istruisce il socket a comparire come proveniente da 127.0.0.1:9150 e si lamenta perché probabilmente il proxy SOCKS è in esecuzione lì. Anche se tu avessi questo indirizzo/porta disponibile non sarebbe d'aiuto: non puoi semplicemente connetterti da localhost in nessun altro posto.

Solo l'utilizzo corretto di socket_bind() è successivo a socket_create() e prima di socket_connect() - una volta stabilita la connessione, non è possibile modificare l'indirizzo di origine.

Dopo aver risolto questo problema, passiamo al problema di "stabilire una connessione al socket solo tramite proxy". Sinceramente la tua domanda è davvero vaga sui dettagli: cosa vuoi ottenere? Hai bisogno di un flusso o hai solo bisogno di chiamare un server web remoto con richiesta HTTP?

Data la tua incomprensione di socket_ e di avere "www.host.com", 8080 nella tua domanda, credo che stai cercando qualche pagina web estratta da www.host.com:8080 tramite proxy SOCKS. In questo caso non è necessario reinventare la ruota e utilizzare cURL: vedere How to use a SOCKS 5 proxy with cURL?

Se la mia impressione è sbagliata e hai davvero bisogno di un flusso attraverso il proxy SOCKS, allora hai bisogno di una libreria esterna che lo faccia per te. Non c'è un'estensione PHP standard che farà questo per te. È possibile guardare a https://github.com/clue/php-socks per ottenere flussi di dati su SOCKS.

+0

Apprezzo veramente gli sforzi che hai compiuto spiegando, ma potresti per favore darmi una struttura del flusso o qualcosa che spieghi questo processo, un modo corretto per realizzare ciò che sto tentando? –

+0

Per favore dimmi cosa stai cercando di fare esattamente: stai provando ad accedere a una pagina web remota o hai bisogno di stabilire un flusso di dati? –