2010-01-03 3 views
9

여러 가지 이유로 LAN의 다른 컴퓨터에 연결하는 프로그램을 작성하고 있습니다. 그러나 여러 대의 컴퓨터에 IP 주소를 입력하지 않고 (엉덩이의 고통) LAN에있는 모든 컴퓨터의 IP 주소를 나열하는 방법이 있는지 궁금합니다. 나는 하루 종일 연구했고 아직까지는 아무 것도 발견하지 못했습니다. 이 종류의 것이 없기 때문에 이것입니까? 미리 감사드립니다.단일 LAN에 연결된 모든 컴퓨터의 IP 주소를 나열하십시오.

편집 : 많은 게시물에서이 게시물을 얻는다면 실제 솔루션을 게시해야합니다. 일반적으로 LAN상의 컴퓨터 IP 주소에 대한 이름 지정 규칙은 동일합니다. 예 : 192.168.2. *, *는 유효한 숫자로 바뀝니다. 내 프로그램은 IP 주소를 감지하여 사용자에게 표시 한 다음 IP의 처음 3 블록을 묻습니다. 그런 다음 핑 (ping)과 응답을 기다림으로써 지정된 IP 명명 규칙에서 최대 200까지 순차적으로 스캔합니다. 응답 없음, 컴퓨터 없음. IP 뒤에 컴퓨터가 있다는 것을 알게되면 IP로 할 수있는 모든 것을 할 수 있습니다.

+0

서브넷을 가져 와서 사용할 수있는 주소로 반복적으로 핑 (ping) 할 수 있습니다. 그러나 그것은 막 끄는 것들에 도움이되지 않을 것입니다. 액세스 권한이있는 경우 DHCP 임대 파일 –

+1

을 참조하십시오. 제이슨 (Jason)에 설명 된대로 'ARPing'은 플랫폼 간 및 방화벽을 방어 할 수있는 유일한 솔루션입니다. BlueRaja의 WNetEnumResource() 접근 방식은 Windows boxen으로 제한된 경우 합리적입니다. 스캐닝/nmap 접근법은 호스트 기반 방화벽과 함께 너무 많은 용을 가지고 있습니다. 마법 탄환/API 호출이 없습니다. iphelper API의 SendARP()가 가장 좋은 방법 일 것입니다. http://msdn.microsoft.com/en-us/library/aa366358%28VS.85%29.aspx –

+0

왜 254입니까? (큰 서브넷에서는 255) – Deanna

답변

6

동일한 하위 집합에 ping 또는 arping 개의 주소보다 더 안정적인 것을 찾을 수 없습니다. 첫 번째 인턴쉽 당시에 특정 소프트웨어에 대해이 기능을 구현했으며, 지난 번에 (내가 몇 년 전만해도)이 기능을 계속 사용하고 있는지 확인했습니다. 나는 그들이 더 좋은 것을 찾지 못했음을 의미한다.

이들에 대한 소스 코드를 찾아서 C#으로 변환하는 것이 어렵지 않습니다. ping, arping. 또는 명령 프롬프트로 쉘을 열고 ping을 실행 한 다음 결과를 구문 분석하면됩니다.

+0

사실,'System.Net.NetworkInformation.Ping'이 트릭을해야합니다. C에서 무엇이든 번역 할 필요가 없습니다. – GeReV

7

1) 서브넷 마스크를 읽고 사용자가있는 서브넷 마스크의 모든 IP 주소를 계산하십시오. 그런 다음 ICMP ping (표준 핑) 또는 ARP 핑을 사용하여 유효한 IP 주소를 모두 나열 할 수 있습니다. ARP Ping은 서브넷 설정에서 매우 안정적입니다.

2) 당신은 방금 네트워크 어댑터와 ping 모든 주소에 대한 IP와 서브넷 마스크를 볼 수 있습니다 모든 호스트

nmap -nsP 192.168.10.1/254 | grep ^Host 
0

을 나열 nmap이 할 수 있습니까? 어느 쪽이든 응답하는 사용자는 사용자가 연결할 필요가있는 것이 있는지 확인하기 위해 쿼리 할 수 ​​있습니다.

2

모든 호스트 검색 도구가 도움이 될 수 있습니다. 특히 Nmap은이 상황에서 과잉이라고 할지라도이 정보를 확실히 제공합니다. "핑 검사"를위한 Google 및 당신은 몇몇 유용한 결과를 얻어야한다.

+3

(+1)은 프로세스 호출을 통해 nmap을 사용하고 결과를 구문 분석합니다. –

2

WNetOpenEnum() 및 WNetEnumResource(), here을 참조하십시오.

관련 문제