[英]How to get domain name from Given IP in C#?
我想從給定的 IP 獲取域名。例如,如果我將 IP 指定為“172.24.17.85”,我應該只獲取域名,例如我的域名是 sonata.net。
C# 中的任何代碼片段?
你試過Dns.GetHostEntry
嗎?
例:
using System;
using System.Net;
class Test
{
static void Main(string[] args)
{
IPAddress addr = IPAddress.Parse("69.59.196.211");
IPHostEntry entry = Dns.GetHostEntry(addr);
Console.WriteLine(entry.HostName); // Prints "stackoverflow.com"
}
}
請注意,這不適用於您提供的示例...如果反向DNS查找不起作用,我不知道您可以做什么。
Console.WriteLine("DomainName: {0}", Dns.GetHostEntry("1.1.1.1").HostName);
我真的懷疑這是否可行。 可能有n
個域指向單個IP。 您可以對反向DNS查找進行一些研究。
這是一個基於@Jon Skeets 回答的完整程序,但帶有輸入/輸出文件。
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text.RegularExpressions;
namespace IP_reverse_checker
{
internal class Program
{
static void Main(string[] args)
{
// based on source: https://stackoverflow.com/a/44040867/6584859
// based on source: https://stackoverflow.com/a/3252871
Regex ip = new Regex(@"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b");
Console.WriteLine(">>> IP reverse checker <<<");
Console.WriteLine();
Console.WriteLine("Please enter the complete path to the text file containing the list of IP addresses:");
string fileNameInput = @"" + Console.ReadLine();
// Lets remove leading/trailing double quotes, if present:
char[] trimChars = { '"' };
string cleanFileNameInput = fileNameInput.Trim(trimChars);
int numberFileLines = 0;
string[] inputLines = new string[] { };
try
{
inputLines = File.ReadAllLines(cleanFileNameInput);
numberFileLines = inputLines.Length;
}
catch (Exception ex)
{
Console.WriteLine("Error reading the file! error: " + ex.Message);
Console.WriteLine();
Console.WriteLine("Press ENTER to exit the program.");
Console.ReadLine();
Environment.Exit(0);
}
List<string> outputLines = new List<string>();
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("The file contains " + numberFileLines + " lines. I start processing...");
Console.WriteLine();
int counter = 0;
foreach (string line in inputLines)
{
counter++;
try
{
MatchCollection result = ip.Matches(line);
if (result[0].Success)
{
string hostName = "";
IPAddress addr = IPAddress.Parse(line);
try
{
IPHostEntry entry = Dns.GetHostEntry(addr);
hostName = entry.HostName;
}
catch (Exception)
{
hostName = ">> No Reverse-DNS entry found!";
}
if (hostName != "")
{
outputLines.Add(line + " | " + hostName);
Console.WriteLine("line " + counter + " of " + numberFileLines + ": " + line + " | " + hostName);
}
}
}
catch (Exception ex)
{
Console.WriteLine("Error processing line " + counter + " - error: " + ex.Message);
}
}
if (outputLines.Count > 0)
{
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("Done! " + outputLines.Count + " IP adresses were processed.");
Console.WriteLine();
Console.WriteLine("Please enter the complete path to the text file where the list with IP addresses AND hostnames should be stored:");
string fileNameOutput = @"" + Console.ReadLine();
string cleanFileNameOutput = fileNameOutput.Trim(trimChars);
try
{
File.AppendAllLines(cleanFileNameOutput, outputLines);
}
catch (Exception ex)
{
Console.WriteLine("Error writing the file! error: " + ex.Message);
}
Console.WriteLine();
Console.WriteLine("Done! Output file was written. Please press ENTER to exit the program.");
Console.ReadLine();
}
}
}
}
輸入文件的格式應類似於此示例:
10.0.10.126
10.0.10.17
10.0.20.120
10.0.20.126
10.0.20.127
10.0.20.138
10.0.20.139
output 文件將如下例所示:
10.0.10.126 | hostname123.dhh.lan
10.0.10.17 | hostname863.dhh.lan
10.0.20.120 | Thinkpad16.DHH.LAN
10.0.20.126 | Thinkpad08.DHH.LAN
10.0.20.127 | NUC-H4-CAM.DHH.LAN
10.0.20.138 | Thinkpad04.DHH.LAN
10.0.20.139 | Thinkpad09.DHH.LAN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.