2014-07-11 8 views
0

다른 것들 중에서도 시스템 정보를 수집하는 프로그램을 만들고 있습니다. 그러나 서브넷 마스크를 얻는 데 문제가 있습니다. 나는 프로그래밍에 익숙하지 않아 아마 이것은 나의 기술 부족과 관련이있을 것이다. 내 코드는 다음과 같습니다C#에서 올바른 서브넷 마스크를 얻을 수 없습니다.

public string Subnet() 
{ 
    string Maske = ""; 
    foreach (NetworkInterface f in NetworkInterface.GetAllNetworkInterfaces()) 
    if (f.OperationalStatus == OperationalStatus.Up) 
    { 
     IPInterfaceProperties ipInterface = f.GetIPProperties(); 
     foreach (UnicastIPAddressInformation unicastAddress in ipInterface.UnicastAddresses) 
     { 
      Maske = unicastAddress.IPv4Mask.ToString(); 
     } 
    } 
    return Maske; 
} 

난 단지 결과로 255.0.0.0을 얻을. 다른 네트워크 카드를 비활성화하거나 제거했지만 여전히 결과가 나타납니다.

+0

예상되는 서브넷 마스크는 무엇입니까? 대부분의 경우 (홈 네트워크) 255.255.255.0이지만 네트워크가 255.0.0.0을 사용하도록 구성되었을 수 있습니다. (당신을 확인하려면 cmd.exe -> ipconfig) – jpgauthier

+0

예상되는 것은 : 255.255.255.0 – user2928068

답변

1

ipInterface.UnicastAddresses 또는 NetworkInterface.GetAllNetworkInterfaces()에 둘 이상의 항목이있을 수 있습니다. 귀하의 방법은 마지막으로 발견 된 방법 만 사용합니다. 내 PC에서 귀하의 방법을 테스트하고 목록에 3 개의 항목이 포함되어 있습니다 : 255.255.255.0, 0.0.0.0 및 255.0.0.0 ...

EDIT : NetworkInterfaceType 루프백을 사용하여 네트워크 인터페이스를 무시해야 할 수도 있습니다. 일부 가상 소프트웨어 인터페이스가 설치된 경우가 있습니다 ...

if (f.OperationalStatus == OperationalStatus.Up && f.NetworkInterfaceType != NetworkInterfaceType.Loopback) 
+0

네, 아니면 적어도 기대했던 것입니다. 그래서 다른 카드를 사용하지 않으려 고했습니다. 사용중인 카드 한 개만 정보를 얻을 수있는 방법이 있습니까? 여러 개의 카드 정보가 필요하지 않습니다. "OperationalStatus.Up"필터가 사용 중이 아닌 필터를 한 번만 사용해야합니까? – user2928068

+0

그 덕분에, 고마워. – user2928068