2011-11-19 2 views
0

아래와 같은 패킷에서 얻은 정보를 사용하여 웹 서버에 대한 tcp 연결을 만들고 싶습니다. 이렇게하려면 연결 함수와 함께 사용할 수있는 주소를 얻으려면 패킷의 portname과 호스트 이름이 필요합니다.C++ Http GET 패킷에서 호스트 이름을 얻는 방법

이것은 내가 C++을 사용한다고 가정합니다.portno가 요청할 서버와 통신한다고 가정 할 수 있습니까? html 페이지는 80 일까? 패킷이 char 배열의 형태로 있다고 가정하고 패킷에서 호스트 이름을 얻으려면 어떻게해야합니까? 나는 현재 문자의 문자열 인 bits.wikimedia.org를 추출하여이를 호스트 이름으로 사용합니다. 그 맞습니까? 일단 호스트 이름이 있으면 getaddrinfo에 전달하고이 함수와 함께 전달 된 구조를 사용하여 연결 함수에서 이해할 수있는 정보가 들어있는 구조체를 생성한다고 가정합니다. 이 가정이 맞습니까?

GET http://bits.wikimedia.org/en.wikipedia.org/load.php?debug=false&lang=en&modules=site&only=scripts&skin=vector&* HTTP/1.1 
Host: bits.wikimedia.org 
Proxy-Connection: close 
User-Agent: Mozilla/5.0 (compatible; Konqueror/4.6; Linux) KHTML/4.6.5 (like Gecko) Fedora/4.6.5-7.fc15 
Referer: http://en.wikipedia.org/wiki/Firewall_(computing) 
Accept: */* 
Accept-Encoding: x-gzip, x-deflate, gzip, deflate 
Accept-Charset: utf-8, utf-8;q=0.5, *;q=0.5 
Accept-Language: en-US,en;q=0.9 

답변

0

당신은 그것의 호스트 이름을 가지도록 Host: header field에 의존 할 수 있어야한다.

링크가 어떻게 표시되는지 확인하십시오. 줄 단위로 헤더를 읽고, "Host :"행을 식별하고, 다음 문자열을 추출하거나, 주어진 경우 (host : port) 포트 번호를 추출해야합니다.

예, getaddrinfo()를 사용하여 호스트 이름의 IP 주소를 얻을 수 있습니다.

1

문자열/문자 배열을 포함하는 오프라인 http 패킷을 가져 오는 경우 문자열의 URL에만 의존해야합니다. HTTP URL은 http : // hostname [: port]/resource ... 형식으로 지정됩니다. 여기서 포트 번호는 선택 사항이며 http 포트 80이 지정되지 않은 경우 기본값입니다. URL을 구문 분석하여 호스트 이름과 포트 번호를 추출해야합니다 (명시 적으로 지정되지 않은 경우 포트 80으로 가정)하고 소켓 연결을 시도해야합니다. 호스트 이름을 IP 주소로 확인하려면 프로그램에서 DNS를 설정하고 연결할 수 있어야합니다. 이것이 없으면 연결을 할 수 없습니다.

관련 문제