0

私はCプログラムに取り組んでおり、プロキシに接続してから、プロキシを介してデータをプル/Webサイトに送信します。ただし、「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;

その後、別のコマンドを送信しようとしましたが、2番目のコマンドを送信すると、プロキシを経由せずにサイトに直接送信されます。

前もって感謝します!!

4

1 に答える 1

1

まず、コードを忘れて、パケットフローを学びます。トラフィックを確認するには、wiresharkなどのパケットキャプチャツールを使用します。ブラウザでプロキシを設定し、httpサイトを開いて、wiresharkで最初にパケットをプロキシに接続することを確認します。接続パケットを選択し、それを右クリックして、「Followtcpstream」を選択します。これにより新しいウィンドウが開き、そのhttpリクエストのパケットの完全なフローを確認できます。

パケットフローがわかれば、最初のCONNECTパケットを作成したのと同じ方法で、残りのパケットを送受信できます。

于 2013-01-09T01:35:10.510 に答える