2013-03-14 4 views

답변

0

귀하의 질문은 구체적이거나 자세하지 않으므로 광범위한 설명을 받으실 수 있습니다. Microsoft .Net Framework 4.5에는 정확히 NetworkInterface이라는 정확히 처리 할 클래스가 있습니다.

The Microsoft Developer Network actually explains in great detail these class requirements.

이 특정 클래스는 로컬 컴퓨터, 네트워크 인터페이스, 어댑터로 알려진 또한 에 대한 데이터를 캡슐화합니다. 이 클래스의 인스턴스 을 만들지 마십시오. GetAllNetworkInterfaces 메서드는 로컬 컴퓨터의 각 네트워크 인터페이스에 대해이 클래스의 인스턴스가 인 배열을 반환합니다.

반원형처럼 자세한 정보가 필요합니다. 그렇지 않으면 실패합니다. 연결되지 않은 어댑터를 사용해 볼 수도 있습니다. 귀하의 질문에 대답을 확인하기 위해 귀하의 로컬 어댑터에 ping 유효한 패킷을 시도 믿을 날 나뭇잎.

information의 관련 정보를 제공하는 NetworkInformation 네임 스페이스가 있습니다. 즉, 현재 사용중인 네트워크 카드에 루프백 주소는 당신이 단순히 127.0.0.1 해당 Ping 요청을 사용할 수 있습니다

Ping pingSender = new Ping(); 
PingOptions options = new PingOptions(); 

// Default Time To Live (TTL) but don't fragment request. 
options.DontFragment = true; 

// Create a buffer of 32 Bytes: 
string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; 
byte[] buffer = Encoding.ASCII.GetBytes(data); 

// Timeout 
int timeout = 120; 

// Ping and Request Reply 
pingReply reply = pingSender.Send(args[0], timeout, buffer, options); 
if(reply.Status == IPStatus.Success) 
{ 
    Console.WriteLine("Address: {0}, reply.Address.ToString()); 
    Console.WriteLine ("RoundTrip time: {0}", reply.RoundtripTime); 
    Console.WriteLine ("Time to live: {0}", reply.Options.Ttl); 
    Console.WriteLine ("Don't fragment: {0}", reply.Options.DontFragment); 
    Console.WriteLine ("Buffer size: {0}", reply.Buffer.Length); 
}  

그리고 :처럼 아주, 아주 간단한 구현 될 것이다.

답장은 패킷을 수신하고 있는지 여부를 나타냅니다.

예, 루프백은 카드 사용 중임을 알리는 응답을 받아야합니다. 그러나 대부분의 경우 무시할 수 있습니다. 요청을 받으면 주소 만 유용한 정보를 표시합니다.

Ping 아이디어가 마음에 들지 않으면 다른 옵션을 선택하십시오. 단순히 변화를 청취 할 NetworkInterface를 설정하는 것입니다 : 그 카드의 응답을 테스트하기 위해 두 개의 유효한 방법은

NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces(); 
foreach(NetworkInterface n in adapters) 
{ 
     Console.WriteLine(" {0} is {1}", n.Name, n.OperationalStatus); 
} 

. 앞에서 언급했듯이 루프백은 특별히 루프백 주소로 요청을 보내지 않는 한 적극적으로 "수신"하지 않습니다.

잘하면 도움이됩니다.

+0

문제는 루프백 어댑터가 패킷을 전혀받지 않는다는 것입니다. 이벤트가 어댑터에 ping을 걸면 해당 루프백 어댑터의 로컬 영역 연결 상태가 단일 패킷을 수신했다는 것을 알 수 없습니다. –

+0

일부 네트워크 관리자가 변경 되었습니까? 사실 업계에서는'127.0.0.1'이 실제로 나쁜 습관이기 때문에 보통'127.0.1.1'이나'127.0.0 '이라고 생각합니다.5 '. 그래도 완전히 기억할 수는 없습니다. 그런 식으로 사람들은 지역 어댑터에 범람하지 않습니다. – Greg

3

PCAP를 사용하여 Windows의 루프백 어댑터에서 패킷을 캡처 할 수 없습니다. 그러나 RawCAP이라는 도구를 사용하여 대신 .pcap 파일을 출력 할 수 있습니다 (WireShark에서 열 수 있음 : http://wiki.wireshark.org/CaptureSetup/Loopback).

+0

그는 PCap에서'ICMP'를 보내지 못했고 응용 프로그램에서'NetworkInformation' 클래스를 사용하여 로컬 '127.0.0.1'에 ping을 수행하여 그것을 확인합니까? 또는 'NetworkInformation'만 사용하여 핑 (ICMP) 요청을 보내시겠습니까? – Greg

+0

그가 PCAP를 사용 중이라면 그는 네트워크에서 패킷을 스니핑하려고합니다. 대부분 로컬 소켓을 사용하는 일부 프로세스 간 통신을 디버깅하려고합니다. –

+0

그가 패킷을 캡처하는 것을 의미하는지 나는 모른다. 방금 네가 포획이라고 말한 걸 깨달았다. 네가 그랬다면 네 말이 맞았다는 것을 의미한다. – Greg