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;

之后我尝试发送另一个命令,但是当我发送第二个命令时,它直接进入站点,而不是通过代理。

提前致谢!!

4

1 回答 1

1

首先忘记代码并学习数据包流。使用任何数据包捕获工具(如wireshark)来查看流量。在浏览器中设置代理并打开一些http站点并观察首先将数据包连接到wireshark中的代理。选择连接数据包,右键单击它并选择“Follow tcp stream”。这将打开一个新窗口,您可以在那里看到该 http 请求的完整数据包流。

一旦你知道了数据包流,那么其余的数据包就可以像你制作第一个 CONNECT 数据包一样被发送和接收。

于 2013-01-09T01:35:10.510 回答