2009-10-16 2 views
0

저는 연결 프로토콜에 익숙하지 않습니다.C : TCP 및 UDP 소켓에서 호스트 이름을 가져 오는 중입니까?

#ifndef NI_MAXHOST 
#define NI_MAXHOST 1025 
#endif 

int error; 

char hostname[NI_MAXHOST] = ""; 


error = getnameinfo(serv_addr, addrlen, hostname, NI_MAXHOST, NULL, 0, 0); 

if (error !=0) { 
    ALogTCP(@"coudldn't resolve hostname or internal connect"); 
    [pool release]; 
    return orig__connect(sockfd, serv_addr, addrlen); 
    } 


if (error == 0) { 
    ALogTCP(@"hostname: %s", hostname); 
    NSString *hostFirst = [NSString stringWithCString:hostname]; 
} 

은 내가 (sendto를에 훅 경우 호스트 이름을 얻기 위해 "동일한"코드를 사용할 수 있습니다) (: 나는 그래서 호스트 이름을 얻을 수 있습니다) (연결을 검사하려면 다음 코드를 사용하고

그래서 나는 UDP를 검사 할 수 있는가?)

미리 감사드립니다.

답변

1

예제 코드에서 사용하는 것과 마찬가지로 sendto()struct sockaddr으로 전달되므로이 작업을 수행 할 수 있어야합니다.

sendto() "후크"를 수행 할 때 중간 소스 드라이버와는 달리 자신의 소스 코드에만 영향을주는 매크로를 사용한다고 가정합니다.

DNS 이름 확인이 ...

당신이 보내는 DNS 조회 패킷에 대한 호스트 이름을 올려다 보았다으로 충분히 낮은 수준에서 "훅" sendto()이 솔루션은 무한 재귀 것이라고했다, 그래서 만약 UDP 패킷을 전송에 따라 달라집니다
관련 문제