私は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;
}
私は(したがって、要求からの直接のIPアドレスを削除する)"GET/HTTP/1.1\n" "From: ...\n"
から"GET/HTTP/1.1\n" "Host: https://www.000webhost.com" "From: ...\n"
にrequest[]
配列を変更した場合、私はまだエラーを取得Error 1003. Direct IP access not allowed
。要求の一部を修正する必要がありますか?他に何が必要ですか?
要求が不正です。行区切り記号は、\ r \ nでなければなりません。それぞれの単一の行の後。また、HTTP1.1はHostヘッダなしでは絶対に動作しませんので、試してみて、あなたの最善の知識に従った[mcve]を生成してください。 –