문자열이 C #에서 유효한 IPv4 또는 IPv6 주소인지 확인하는 방법은 무엇입니까?
정규식은 IP 주소가 취할 수있는 다른 형식 때문에 IP 주소를 확인하는 데 위험하다는 것을 알고 있습니다.
C 및 C ++에 대한 유사한 질문을 보았고 C # inet_ntop () 에없는 함수로 해결되었습니다.
내가 찾은 .NET 솔루션은 표준 "ddd.ddd.ddd.ddd"형식 만 처리합니다. 어떤 제안?
이것을 사용하여 시도하고 구문 분석 할 수 있습니다.
IPAddress.TryParse
그리고 확인 AddressFamily
하는
IPv4의 경우 System.Net.Sockets.AddressFamily.InterNetwork를 반환하고 IPv6의 경우 System.Net.Sockets.AddressFamily.InterNetworkV6을 반환합니다.
편집 : 일부 샘플 코드. 원하는대로 변경 :
string input = "your IP address goes here";
IPAddress address;
if (IPAddress.TryParse(input, out address))
{
switch (address.AddressFamily)
{
case System.Net.Sockets.AddressFamily.InterNetwork:
// we have IPv4
break;
case System.Net.Sockets.AddressFamily.InterNetworkV6:
// we have IPv6
break;
default:
// umm... yeah... I'm going to need to take your red packet and...
break;
}
}
사용에 대한 경고 System.Net.IpAddress.TryParse()
:
정수 (예 : "3")를 포함하는 문자열을 전달하면 TryParse 함수는이를 "0.0.0.3"으로 변환하므로 유효한 InterNetworkV4 주소가됩니다. 따라서 최소한 재 포맷 된 "0.0.0.3"은 사용자 애플리케이션에 반환되어야 사용자가 입력이 어떻게 해석되었는지 알 수 있습니다.
string myIpString = "192.168.2.1";
System.Net.IPAddress ipAddress = null;
bool isValidIp = System.Net.IPAddress.TryParse(myIpString, out ipAddress);
경우 isValidIp
사실, 당신은 확인할 수 ipAddress.AddressFamily
는 IPv4 또는 IPv6 있는지 확인합니다. 그것은이다 AddressFamily.InterNetwork
IPv4에서와 AddressFamily.InterNetworkV6
IPv6를 위해.
당신은 체크 아웃 할 수 System.Uri.CheckHostName (값) 반환을 Unknown
, Dns
, IPv4
,IPv6
.
if( Uri.CheckHostName( value ) != UriHostNameType.Unknown)
//then 'value' is a valid IP address or hostname
모든 정수를 구문 분석하지 않고 IP 만 구문 분석하려면 .
IPv4 및 :
IPv6 만 확인하십시오 .
if (input.Contains(".") || input.Contains(":"))
{
IPAddress address;
if (IPAddress.TryParse(input, out address))
{
switch (address.AddressFamily)
{
case AddressFamily.InterNetwork:
return Ip4Address;
case AddressFamily.InterNetworkV6:
return Ip6Address;
}
}
}
IPAddress.GetAddressBytes (). Length 속성을 사용할 수 있습니다.
IPAddress someIP;
if (someIP.GetAddressBytes().Length == 4)
{
// IPV4
}
else (someIP.GetAddressBytes().Length == 16)
{
// IPV6
}
else
{
// Unknown
}
작동해야 할 것 같아요
A combination of tests applied to a string or IPAddress, works for me..
/// <summary>
/// Test string for valid ip address format
/// </summary>
///
/// <param name="Address">The ip address string</param>
///
/// <returns>Returns true if address is a valid format</returns>
public static bool IsValidIP(IPAddress Ip)
{
byte[] addBytes = Ip.GetAddressBytes();
switch (Ip.AddressFamily)
{
case AddressFamily.InterNetwork:
if (addBytes.Length == 4)
return true;
break;
case AddressFamily.InterNetworkV6:
if (addBytes.Length == 16)
return true;
break;
default:
break;
}
return false;
}
/// <summary>
/// Test string for valid ip address format
/// </summary>
///
/// <param name="Address">The ip address string</param>
///
/// <returns>Returns true if address is a valid format</returns>
public static bool IsValidIP(string Address)
{
IPAddress ip;
if (IPAddress.TryParse(Address, out ip))
{
switch (ip.AddressFamily)
{
case System.Net.Sockets.AddressFamily.InterNetwork:
if (Address.Length > 6 && Address.Contains("."))
{
string[] s = Address.Split('.');
if (s.Length == 4 && s[0].Length > 0 && s[1].Length > 0 && s[2].Length > 0 && s[3].Length > 0)
return true;
}
break;
case System.Net.Sockets.AddressFamily.InterNetworkV6:
if (Address.Contains(":") && Address.Length > 15)
return true;
break;
default:
break;
}
}
return false;
}
'Programing' 카테고리의 다른 글
레이아웃 방향을 세로로 고정하는 방법은 무엇입니까? (0) | 2020.11.13 |
---|---|
금지됨이 서버에 액세스 할 수있는 권한이 없습니다. (0) | 2020.11.13 |
프로그래밍 방식으로 드롭 다운 목록 선택 항목 설정 (0) | 2020.11.13 |
WebP 지원 감지 (0) | 2020.11.13 |
mongodb에 json 파일 삽입 (0) | 2020.11.13 |