나는 이것이 죽은 말을 걷어차는 것을 알고 있지만 어쩌면 이것은 누군가를 도울 수 있습니다. 로컬 IP 주소를 찾는 방법을 찾기 위해 모든 곳을 살펴 봤지만 어디에서나 사용한다고 말합니다.
Dns.GetHostEntry(Dns.GetHostName());
컴퓨터에 할당 된 모든 주소 만 가져 오기 때문에이 점이 마음에 들지 않습니다. 여러 네트워크 인터페이스가있는 경우 (대부분의 모든 컴퓨터에서 현재 수행하는 작업) 어떤 주소가 어떤 네트워크 인터페이스와 연결되는지 알 수 없습니다. 많은 연구를 한 후 NetworkInterface 클래스를 사용하고 정보를 빼내는 함수를 만들었습니다. 이런 식으로 인터페이스의 유형 (이더넷, 무선, 루프백, 터널 등), 활성 여부에 관계없이 훨씬 더 많은 것을 알 수 있습니다.
public string GetLocalIPv4(NetworkInterfaceType _type)
{
string output = "";
foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces())
{
if (item.NetworkInterfaceType == _type && item.OperationalStatus == OperationalStatus.Up)
{
foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses)
{
if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
{
output = ip.Address.ToString();
}
}
}
}
return output;
}
이더넷 네트워크 인터페이스 호출의 IPv4 주소를 가져 오려면 다음을 수행하십시오.
GetLocalIPv4(NetworkInterfaceType.Ethernet);
또는 무선 인터페이스 :
GetLocalIPv4(NetworkInterfaceType.Wireless80211);
무선 인터페이스의 IPv4 주소를 가져 오려고하지만 컴퓨터에 무선 카드가 설치되어 있지 않으면 빈 문자열 만 반환합니다. 이더넷 인터페이스도 마찬가지입니다.
이것이 누군가를 돕기를 바랍니다! :-)
편집하다:
이 함수는 IP 주소를 사용하는 것보다 훨씬 더 나은 방법으로 IP 주소를 추출하는 경우에도 @NasBanov 덕분 Dns.GetHostEntry(Dns.GetHostName())
에 단일 인터페이스에서 동일한 유형의 여러 인터페이스 또는 여러 IP 주소를 지원하는 데별로 좋지 않습니다. . 여러 주소가 할당 된 경우 단일 IP 주소 만 반환합니다. 할당 된 주소를 모두 반환하려면 원래 함수를 조작하여 단일 문자열 대신 항상 배열을 반환하면됩니다. 예를 들면 다음과 같습니다.
public static string[] GetAllLocalIPv4(NetworkInterfaceType _type)
{
List<string> ipAddrList = new List<string>();
foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces())
{
if (item.NetworkInterfaceType == _type && item.OperationalStatus == OperationalStatus.Up)
{
foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses)
{
if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
{
ipAddrList.Add(ip.Address.ToString());
}
}
}
}
return ipAddrList.ToArray();
}
이제이 함수는 특정 인터페이스 유형에 할당 된 모든 주소를 반환합니다. 이제 단일 문자열을 얻으려면 .FirstOrDefault()
확장을 사용 하여 배열의 첫 번째 항목을 반환하거나 비어있는 경우 빈 문자열을 반환 할 수 있습니다.
GetLocalIPv4(NetworkInterfaceType.Ethernet).FirstOrDefault();
If I am not connected to a network and I am connected to the internet
이 진술은 모순되는 것 같습니다. 컴퓨터가 개인 LAN 또는 인터넷에 연결되어 있는지 확인하려고합니까?