리눅스에서 ip/tcp 헤더로 메시지를 보내고받는 원시 소켓을 만들려고합니다. 성공적으로 포트에 바인드하여 tcp 메시지를 수신 할 수 있습니다 (예 : syn) 그러나 메시지는 os가 처리하지만 광산은 처리하지 못합니다. 나는 그것의 독자 일뿐입니다 (wireshark와 같은). 원시 소켓이 포트 8888에 바인드 된 다음 해당 포트로 telnet 연결을 시도합니다. wireshark에서 "syn"요청을 수신하면 포트 8888이 "첫 번째 응답"으로 응답 함을 나타냅니다. 내 프로그램에서 그것은 새로운 메시지를 수신했음을 보여 주며 어떤 메시지도 응답하지 않습니다.리눅스 원시 소켓 프로그래밍 질문
어떤 방법이 실제로 해당 포트에 결합하는, 내가 쉽게 읽을 수를 확인하는 오류를 절단하려고
여기내 코드의 일부입니다 (OS 그것을 처리 방지)
sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
int tmp = 1;
const int *val = &tmp;
setsockopt (sockfd, IPPROTO_IP, IP_HDRINCL, val, sizeof (tmp));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(8888);
bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr));
//call recv in loop
실제 TCP 레이어를 코딩하려는 이유가 무엇입니까? – laura
현재 프로젝트에서 tcp/ip 헤더를 변경해야 할 수도 있습니다. –
Google의 "access tcp header"를 사용하면 처음 몇 가지 결과가 어떤 기능을 사용할 수 있는지 알려줄 것입니다. 나는 "정상적인"소켓 (beej의 가이드에 사용 된 것과 같은)이 매우 유용하다고 생각하지 않는다. – laura