1

アドレスがIPアドレスなのかホスト名なのかを判断しようとすると問題が発生します。私が見つけたものはすべて、正規表現を使用するように言っています。IFステートメントの作成方法がわかりません。これが私のコードです:

private void btnPingAddress_Click(object sender, EventArgs e)
{
    intByteSize = Convert.ToInt32(numericDataSize.Value);
    intNumberOfPings = Convert.ToInt32(numericPing.Value);
    strDnsAddress = cmbPingAddress.Text;
    //If address is IP address:
    if (strDnsAddress Contains ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?")
    {
       txtPingResults.Text = "Pinging " + strIpAddress + " with " + intByteSize + " bytes of data:" + "\r\n";
    }
    // If address is hostname:
    else
    {
       strIpAddress = Convert.ToString(Dns.GetHostEntry(strDnsAddress));
       txtPingResults.Text = "Pinging " + strDnsAddress + "  [" + strIpAddress + "]  with " + intByteSize + " bytes of data:" + "\r\n";
    }           
    Ping ping = new Ping();
    PingReply reply = ping.Send(cmbPingAddress.Text);
    txtPingResults.Text = "Pinging " + cmbPingAddress.Text + "  [" + Convert.ToString(reply.Address) + "]  with " + intByteSize + " bytes of data:" + "\r\n";
    for (int i = 0; i < intNumberOfPings; i++)
    {
       txtPingResults.AppendText("Reply from "+Convert.ToString(reply.Address)+": Bytes="+Convert.ToString(intByteSize) +" Time="+Convert.ToString(reply.RoundtripTime) +"ms"+" TTL="+Convert.ToString(reply.Options.Ttl)+ "\r\n");
       cmbPingAddress.Items.Add(cmbPingAddress.Text);
    }
}

どんな助けでも大歓迎です。

4

4 に答える 4

5

最近、WebAPIヘッダーを分解するためにこれを行う必要がありました。Uri.CheckHostNameおそらくそれを行う最も簡単な方法であり、ipv6サポートが含まれています。

var dns = Uri.CheckHostName("www.google.com"); //UriHostNameType.Dns
var ipv4 = Uri.CheckHostName("192.168.0.1");   //IPv4
var ipv6 = Uri.CheckHostName("2601:18f:780:308:d96d:6088:6f40:c5a8");//IPv6
dns = Uri.CheckHostName("Foo");    //Dns

最後のものはトリッキーですが、技術的には正しいです。少なくとも、ホスト名とIPアドレスを除外することができます。

于 2017-01-19T03:04:03.847 に答える
3

試す:

ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";

ValidHostnameRegex = "^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$";



if(Regex.IsMatch(strDnsAddress, ValidIpAddressRegex )) {
    // the string is an IP
}
else if(Regex.IsMatch(strDnsAddress,ValidHostnameRegex )){
    // the string is a host

 }
于 2012-08-16T01:26:44.047 に答える
1

正規表現の使用:

if(Regex.IsMatch(strDnsAddress, "(2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?")) {
    // the string is an IP
}

または、この質問で提供されている正規表現を使用できます(habib zareが彼のコメントで示唆しているように)

于 2012-08-16T01:21:03.223 に答える
0

私のような初心者にとっては、非常に基本的で理解しやすい概念で説明しようとしています。

注:関数の引数は、オプションの引数(CheckHost(string host="127.0.0.0"))として定義されています。

public static void CheckHost(string host="127.0.0.1")
    {
        if (host == null || host.Length == 0)
        {
            Console.WriteLine("no host is defined!");
        }
        else if (Uri.CheckHostName(host).ToString() == "Dns")
        {
            Console.WriteLine("The "+host+" is a DNS hostname.");

        }
        else if (Uri.CheckHostName(host).ToString() == "IPv4")
        {
            Console.WriteLine("The " + host + " is an IP Address v4.");
        }
        else if (Uri.CheckHostName(host).ToString() == "IPv6")
        {
            Console.WriteLine("The " + host + " is an IP Address v6.");
        }
        else
        {
            Console.WriteLine("The " + host + " is unknown!");
        }
    }
于 2020-03-01T19:25:52.707 に答える