2010-07-27 5 views
0

나는 소켓과 함께 일하고 있는데 여기에 TIdTCPClient와 TIdTCPServer를 사용하고있다. TIdTCPClient가 연결된 TIdTCPServer가 동일한 네트워크에 있는지 확인해야합니다.소켓 클라이언트 - 서버가 같은 네트워크에 있는지 확인하는 방법은 무엇입니까?

어떻게하면됩니까?

at.

+0

TKS는, 난 그냥 호스트가 로컬 호스트인지 아닌지를 확인하는 데 필요한 내 사건을 해결합니다. 솔루션 : 함수 IsLocalHost (AHost : string) : Boolean; var LStrRegexRedeLocal : string; (.^172 \ 0.1 [6-9] \) | | ((.^10 \) = '을 : = TRUE 다른 LStrRegexRedeLocal 시작 ='로컬 호스트 '다음 결과 소문자 (AHost) 경우 시작^172 [.0 [0-9] \.) | (^ 172 \ .3 [0-1] \.) | (^ 192 \ .168 \.) | (^ 127 \ .0 \ .0 \. 1)'; 결과 : = ExecRegExpr (LStrRegexRedeLocal, AHost); 끝; 끝; –

답변

0

Tks가 내 경우를 해결하기 위해 호스트가 로컬 호스트인지 아닌지 확인해야했습니다.

솔루션 : 히트에 대한

function IsLocalHost(AHost : string) : Boolean; 
var 
    LStrRegexRedeLocal : string; 
begin 
    if LowerCase(AHost) = 'localhost' then 
    result := True 
    else 
    begin 
    LStrRegexRedeLocal := '(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)|(^127\.0\.0\.1)'; 
    result := ExecRegExpr(LStrRegexRedeLocal, AHost); 
    end; 
end; 
1

"같은 네트워크"에 대한 의미는 무엇입니까? traceroute 유틸리티를 모방하고 라우터의 주소가있는 홉 수를 확인하고 예상 된 홉과 비교할 수 있습니다.

6

이러한 종류의 비교를 수행하려면 클라이언트의 서브넷 마스크를 알아야합니다. 소켓은 해당 정보를 노출시키지 않으므로 OS에 직접 문의해야합니다 (예 : Windows에서는 GetAdaptersInfo() 또는 GetAdapterAddresses()에 의해 반환 된 목록에서 클라이언트의 연결된 로컬 IP를 찾을 수 있습니다). 마스크를 얻으면 클라이언트의 IP와 서버의 IP를 마스크하여 결과 값이 동일한 지 확인할 수 있습니다.

+0

방금 ​​완료해야합니다 (clientip 및 netmask) = (destinationip 및 netmask) –

+0

예. 어쨌든 IPv4 IP의 경우 GetAdaptersInfo()는 IPv4 만 지원합니다. IPv6 IP를 사용하면 좀 더 복잡해집니다. –

+0

동일한 "네트워크"가 아닌 동일한 "서브넷"입니다. 네트워크는 훨씬 더 광범위한 정의이며 전체 회사 LAN 네트워크는 여러 서브넷으로 구성 될 수 있습니다. –

관련 문제