C로 네트워킹하는 방법에 대한 예제를 많이 읽었습니다. SYN 플래그가있는 TCP 패킷이 와이어 (wireshark 포함)에 있음을 알 수 있지만 수신 측 (테스트 목적으로 가상 컴퓨터를 설정 함)은 RST가 아닌 아무 것도 보내지 않습니다.TCP : TCP 연결 설정
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <strings.h>
int establish_tcp(int port) {
char *ip = "10.0.2.15"; /* Virtual Machine */
struct sockaddr_in sockaddrin;
struct hostent *host;
int sock;
sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock == -1) {
fprintf(stderr, "Socket Error\n");
exit(1);
}
sockaddrin.sin_family = AF_INET;
host = gethostbyname(ip);
if(host == NULL) {
fprintf(stderr, "%s unknown host.\n", ip);
exit(2);
}
/* copies the internet address into the struct */
bcopy(host->h_addr, &sockaddrin.sin_addr, host->h_length);
/* specify port (used by TCP a layer above */
sockaddrin.sin_port = port;
/* try to connect */
return connect(sock, (struct sockaddr*) &sockaddrin, sizeof(struct sockaddr_in));
}
int main(void) {
printf("status: %i\n", establish_tcp(80));
return 0;
}
패킷이 시간 초과되고 -1이 상태 코드로 반환 될 때까지 시간이 걸립니다. 대상 컴퓨터가 회신을 보내지 않는 이유는 무엇입니까? 나는 무엇을 간과 했는가?
나는 내가 그것을 하지 셋업 문제가 있음을 알아 낸 것 같아요. 우분투 12.04를 사용하고 있습니다. 가상 머신은 Debian Wheezy입니다. IP를 ifconfig
으로 확인합니다. 기계가 telnet
으로 연결할 수 있으면 시도했습니다.
가상 박스와 관련된 문제를 피하기 위해 IP를 Google로 대체하려고 시도했지만 동일한 결과가 나타났습니다.
이 프로그램 자체에 대한보다 네트워크 설정에 대한 추가 질문입니다. 질문을 현재 테스트중인 환경에 대한 세부 정보로 업데이트하십시오. 대부분의 경우 연결할 수없는 IP 주소에 연결하려고 시도하고 있으며 그 이유는 다양합니다. –
그리고 아마도 당신은 예를 들면 다음과 같은 것을 사용합니다. telnet 또는 netcat을 사용하여이 IP/포트에 먼저 연결하십시오. –