确定组合框文本是 IP 地址还是主机名

Tor*_*726 1 c#

我在尝试确定地址是 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激。

ria*_*njs 7

我最近需要这样做来分离 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
Run Code Online (Sandbox Code Playgroud)

最后一个很棘手,但技术上是正确的。至少,您可以排除主机名与 IP 地址的问题。