C# 在C中从DNS解析IP地址#

C# 在C中从DNS解析IP地址#,c#,ip-address,C#,Ip Address,我正在尝试与IP地址建立TCP套接字连接。我可以直接解析IP地址,如下所示: IPAddress ipAddress = IPAddress.Parse("192.168.1.123"); IPEndPoint remoteEP = new IPEndPoint(ipAddress, 80); // Create a TCP/IP socket. Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream,

我正在尝试与IP地址建立TCP套接字连接。我可以直接解析IP地址,如下所示:

IPAddress ipAddress = IPAddress.Parse("192.168.1.123");
IPEndPoint remoteEP = new IPEndPoint(ipAddress, 80);
// Create a TCP/IP  socket.
Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);  // This works!
但是,我不知道如何从DNS字符串中猜出这个IP地址。我尝试了以下每种组合:

IPAddress ipAddress = Dns.Resolve("www.mydns.org");   // No dice
IPAddress ipAddress = Dns.GetHostEntry("www.mydns.org");  // Nada
IPAddress ipAddress = IPAddress.Parse(Dns.Resolve("www.mydns.org"));   // So many errors...
IPAddress ipAddress = IPAddress.Parse(Dns.Resolve("www.mydns.org").toString());  // WTh is this attempt anyway?
你们这些善良的灵魂中有谁能帮我从DNS中挤出一个IP地址吗

foreach (IPAddress ip in Dns.GetHostAddresses("www.mydns.org"))
{
    Console.WriteLine(ip.ToString());
}
或者干脆
IPAddress address=Dns.GetHostAddresses(“www.mydns.org”)[0]如果您只想要第一个

IPHostEntry entry = Dns.GetHostEntry(hostNameOrAddress: "www.google.com");
foreach (IPAddress addr in entry.AddressList)
{
    // connect, on sucess call 'break'
}

通过调用GetHostEntry简单地枚举地址,一旦成功,就打破循环

我有一个非常简洁的扩展方法

我考虑到IPV6可能作为DNS类返回的地址列表中的第一个地址返回,并允许您在结果上“支持”IPV6或IPV4。以下是完整记录的类(为了简洁起见,仅使用本例中的相关方法):

别忘了把这个类放在命名空间中!:-)

现在,您可以简单地执行以下操作:

var server = "http://simpax.com.br".ToIPAddress();
var blog = "http://simpax.codax.com.br".ToIPAddress();
var google = "google.com.br".ToIPAddress();
var ipv6Google = "google.com.br".ToIPAddress(true); // if available will be an IPV6

您还可以使用LINQ获取第一个:
Net.Dns.GetHostAddresses(Name).first()
。请注意,如果找不到主机名,
SocketException
将被抛出。很好的答案,应该是选择的答案。
var server = "http://simpax.com.br".ToIPAddress();
var blog = "http://simpax.codax.com.br".ToIPAddress();
var google = "google.com.br".ToIPAddress();
var ipv6Google = "google.com.br".ToIPAddress(true); // if available will be an IPV6