You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

71 lines
2.6 KiB

/*
* Copyright (C) Alibaba Cloud Computing
* All rights reserved.
*
* 版权所有 (C)阿里云计算有限公司
*/
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Text;
using System.Text.RegularExpressions;
namespace Aliyun.Api.LOG.Utilities
{
internal class IpUtils
{
public static bool IsInternalIP(IPAddress ip)
{
//According to RFC 1918 (http://www.faqs.org/rfcs/rfc1918.html). private IP ranges are as bellow
// 10.0.0.0 - 10.255.255.255 (10/8 prefix)
// 172.16.0.0 - 172.31.255.255 (172.16/12 prefix)
// 192.168.0.0 - 192.168.255.255 (192.168/16 prefix)
byte[] addrs = ip.GetAddressBytes();
if ((addrs[0] == 10) ||
(addrs[0] == 192 && addrs[1] == 168) ||
(addrs[0] == 172 && (addrs[1] >= 16) && (addrs[1] < 32)))
return true;
else
return false;
}
public static bool IsIpAddress(String str)
{
Regex regex = new Regex("^(\\d{1,3}\\.){3}\\d{1,3}");
return regex.Match(str).Success;
}
public static string GetLocalMachinePrivateIp()
{
NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
string ip = "";
foreach (NetworkInterface adapter in adapters)
{
if (adapter.OperationalStatus == OperationalStatus.Up)
{
IPInterfaceProperties IPInterfaceProperties = adapter.GetIPProperties();
UnicastIPAddressInformationCollection UnicastIPAddressInformationCollection = IPInterfaceProperties.UnicastAddresses;
foreach (UnicastIPAddressInformation UnicastIPAddressInformation in UnicastIPAddressInformationCollection)
{
IPAddress addr = UnicastIPAddressInformation.Address;
if (!IPAddress.IsLoopback(addr) &&
UnicastIPAddressInformation.Address.AddressFamily == AddressFamily.InterNetwork)
{
if (IsInternalIP(addr))
{
ip = addr.ToString();
break;
}
}
}
if (!String.IsNullOrEmpty(ip))
break;
}
}
return ip;
}
}
}