2013-01-09 24 views
0

我正在開發一個C程序來連接到代理,然後通過代理將數據/發送數據發送到網站。然而,我在讓「CONNECT」聲明起作用後該怎麼辦,我感到困惑。通過代理從網站獲取數據

我當前的代碼:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <unistd.h> 
#include <sys/socket.h> 
#include <sys/types.h> 
#include <arpa/inet.h> 
#include <netinet/in.h> 

#define maxlen 2048 

int main(int argc, char *argv[]) 
{ 
int mysocket; 
int len; 
char buffer[2000]; 
char msg[] = "CONNECT http://example.com:80/ HTPP/1.0\r\n\r\n"; 


mysocket = socket(AF_INET, SOCK_STREAM, 0); 

struct sockaddr_in dest; 

memset(&dest, 0, sizeof(dest)); 

dest.sin_family = AF_INET; 
dest.sin_addr.s_addr = inet_addr("101.255.60.162"); 
dest.sin_port = htons(3128); 

connect(mysocket, (struct sockaddr *)&dest, sizeof(struct sockaddr)); 

send(mysocket, msg, strlen(msg), 0); 
len = recv(mysocket, buffer, maxlen, 0); 

buffer[len] = '\0'; 

printf("%s \n", buffer); 
close(mysocket); 
return 0; 

我試過之後發送下一個命令,但是當我把第二個命令它直接到網站,而不是通過代理。

在此先感謝!

回答

1

首先忘掉代碼並瞭解數據包流。使用wireshark等任何數據包捕獲工具查看流量。在瀏覽器中設置一個代理並打開一些http站點,觀察第一個連接數據包在wireshark中的代理。選擇連接數據包,右鍵單擊它並選擇「Follow tcp stream」。這將打開一個新窗口,您可以看到該請求的完整數據包流。

一旦你知道數據包流的數據包,然後其餘的可以發送和您所做的第一個CONNECT包同樣的方式獲得。

+0

好吧,我會看看!謝謝! –