2016-08-13 2 views
2

LAN을 통한 검색을위한 간단한 프로그램 작성으로 프로그램 검색 방법 (단일 IP 주소 확인, 호스트 이름 확인, 로컬 시스템 서브넷 확인 ... 등)이 거의 없습니다.서브넷 마스크에서 검색 할 IP 주소를 아는 방법은 무엇입니까?

그리고 "로컬 컴퓨터 서브넷 확인"(atleast 나는 문제가 될 수 있다고 생각해!)에 붙어있어!?

여기에 문제가있을 수 있으므로 C++에서 처리 할 수있는 방법이 있는지 알고 싶습니다.

로컬 컴퓨터 서브넷을 검색 할 수 있도록 getadapteraddresses()을 사용하면 IP 주소와 서브넷 마스크를 얻을 수 있습니다. getadapteraddresses() 서브넷 - 255.255.254.0 및 IP - 192.160.5.10을 반환 할 경우 의문의 여지가 있습니다. 첫 번째 단계는 192.168.5.0-255를 검색하는 것입니다. 그러나 다음은 192.168.6.0-255 또는 192.168.4.0-255를 검색해야하는 범위는 무엇입니까?

C++에서이를 확인하는 방법이 있다면 어떤 힌트라도 좋을 것입니다.

감사합니다 :)

+0

라우터가 당신을 위해하는 일이 아닙니까? –

+0

@ πάνταῥεῖ 내 목표는 프로그램을 시작하고 로컬 컴퓨터 서브넷을 통한 검색을 선택하고 프로그램이 살아있는 모든 IP 주소를 제공합니다 (일부 추가 정보 MAC 주소, 호스트 이름 등) – Genato

+1

서브넷 마스크와 IP 주소 및 그리고 그들; 이 결과와 OR은 마스크에있는 비트에 대한 모든 조합을 0으로 만듭니다. 이들은 현재 서브넷의 모든 주소입니다. –

답변

1

당신은

int count = (~netmask) & 0x7FFFFFFF; 
int network = ip_address & netmask; 
for (int i=1; i<count; i++) { 
    int addr = network + i; 
    ... 
} 
+0

넷 마스크가 서브넷입니까? '예'인 경우 netmask는'(~ netmask) & 0x7FFFFFFF'를 수행 할 때 명시 적으로 16 진수 여야합니다? 'ip_address & netmask'를 수행 할 때 ip_address는 어떤 형식이어야합니까? – Genato

+1

@Genato : 주소가 ''인 경우, 넷 마스크와 ip_address가 32 비트 부호없는 숫자'(b1 << 24) | (b2 << 16) | (b3 << 8) | b4로 가정됩니다. . . '. – 6502

0

야처럼 뭔가 모든 주소를 계산할 수 있습니다 난 당신이 잘못된 값을 가지고 생각합니다. 192.168.5.x가 255.255.254.0의 범위에 없습니다. 이 서브넷 마스크는 192.168.0.0에서 192.168.1.255까지의 주소를 허용합니다. 5가 호스트 부분 인 경우 마스크는 255.255.248.0이어야합니다.

+0

나는 그러한 가치를 얻지 못했다. 나는 그와 같은 예를 만난다면 내 관심사 다. 흠 어떻게 설명하겠습니까? 집에있는 서브넷은 255.255.255.0이고 내 IP 주소는 192.168.5.20입니까? – Genato

+0

완벽하게 유효합니다. 서브넷 범위는 192.168.5.0 -> 192.168.5.255입니다. 192.168.5.0 및 192.168.5.255는 서브넷에 있지만 유효한 주소가 아니며 첫 번째 주소는 네트워크 주소이고 두 번째 주소는 브로드 캐스트 주소입니다. –

+0

@RichardCritten 나는 그것을 알고 도로를 얻을 수는 없지만 내 질문은 뭔가 다른 것이 었습니까? – Genato

관련 문제