gpt4 book ai didi

c - 如何绕过阻止直接连接的网站?

转载 作者:行者123 更新时间:2023-11-30 16:43:21 25 4
gpt4 key购买 nike

我正在尝试使用 C 套接字访问网站 https://www.000webhost.com:

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

int main(int argc, char** argv) {
struct sockaddr_in servaddr;
struct hostent *hp;
int sock_id;
char message[1024*1024];
char request[] = "GET / HTTP/1.1\n" "From: ...\n";

//get a socket
if((sock_id = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
fprintf(stderr,"Couldn't get a socket.\n");
exit(EXIT_FAILURE);
}else {
fprintf(stderr,"Got a socket.\n");
}

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

//get address
if((hp = gethostbyname("000webhost.com")) == NULL) {
fprintf(stderr,"Couldn't get an address.\n");
exit(EXIT_FAILURE);
}else {
fprintf(stderr,"Got an address.\n");
}

memcpy((char *)&servaddr.sin_addr.s_addr, (char *)hp->h_addr, hp->h_length);

//port number and type
servaddr.sin_port = htons(80);
servaddr.sin_family = AF_INET;

//connect
if(connect(sock_id, (struct sockaddr *)&servaddr, sizeof(servaddr)) != 0) {
fprintf(stderr, "Couldn't connect.\n");
}else {
fprintf(stderr,"Got a connection.\n");
}

//request
write(sock_id,request,strlen(request));

//response
read(sock_id,message,1024*1024);

fprintf(stdout,"%s",message);

return 0;
}

如果我将 request[] 数组从 "GET/HTTP/1.1\n""From: ...\n" 更改为 "GET/HTTP/1.1\n""Host: https://www.000webhost.com""From: ...\n" (因此从请求中删除直接 IP 地址),我仍然得到错误错误 1003。不允许直接 IP 访问。我需要修改请求的其他部分吗?我还需要做什么?

最佳答案

您的请求格式错误:

  • 每一行都需要以 \r\n 终止,而不仅仅是 \n。 (有些网络服务器会让您摆脱 \n 的束缚,但我不知道这是否适用于 000webhost。)

  • 每个 header 后面都需要有一个 \r\n。您在上一段中提到的修改后的代码在 Host header 末尾缺少 \r\n

  • Host header 只需为主机名(例如,"Host: example.com")。请勿包含 http://

关于c - 如何绕过阻止直接连接的网站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45315750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com