更改gethostentry返回的IP的最后一个八位字节

时间:2011-09-28 21:23:23

标签: c# split ip-address

想知道是否有人可以帮助我。我对c#并不多,但它很容易实现我想做的事情。

我正在创建一个小应用程序,它将接收我的网络上的主机名,然后返回完整的ipaddress(ipv4)....从那里我有ping / vnc / telnet等选项。

我的问题在于......我正在使用GetHostEntry来返回IP地址。然后我想将IP存储到变量中,并更改最后一个八位字节。我认为一个简单的sting.split('.')将是答案,但我无法将IP转换为字符串,因为源不是字符串。有什么想法吗?

以下是获取IP地址的方法,它只是基本的GetHostEntry方法:

IPHostEntry host = Dns.GetHostEntry( hostname );

Console.WriteLine( "GetHostEntry({0}) returns: {1}", hostname, host );

// This will loop though the IPAddress system array and echo out
// the results to the console window

foreach ( IPAddress ip in host.AddressList )
{
    Console.WriteLine( "    {0}", ip );
}

3 个答案:

答案 0 :(得分:1)

假设只有一个网络适配器:

// When an empty string is passed as the host name, 
// GetHostEntry method returns the IPv4 addresses of the local host
// alternatively, could use: Dns.GetHostEntry( Dns.GetHostName() )
IPHostEntry entries = Dns.GetHostEntry( string.Empty );
// find the local ipv4 address
IPAddress hostIp = entries.AddressList
                  .Single( x => x.AddressFamily == AddressFamily.InterNetwork );

获得主机IP后,您可以使用IP字节通过修改任何八位字节来创建新的IP地址。在您的情况下,您希望修改最后一个八位字节:

// grab the bytes from the host IP
var bytes = hostIp.GetAddressBytes();
// set the 4th octect (change 10 to whatever the 4th octect should be)
bytes[3] = 10;
// create a new IP address
var newIp = new IPAddress( bytes );

当然,您可以更改任何八位字节。以上示例仅适用于第4个八位字节。如果你想要第一个八位字节,你可以使用bytes[0] = 10

答案 1 :(得分:0)

您可以使用IPAddress对象的ToString()方法将其转换为字符串。

您是否考虑过只使用System.Net.IPAddress对象?

这是关于其Parse方法的文档,该方法接受一个字符串并尝试将其转换为IPAddress对象,因此您可以执行您想要执行的任何字符串魔术:http://msdn.microsoft.com/en-us/library/system.net.ipaddress.parse.aspx

或者,如果您想知道如何将字符串转换为数字,请尝试使用数值数据类型的TryParse方法。也许Int32.TryParse会起作用。

答案 2 :(得分:0)

这是一个相当脆弱的方法,依赖于你的机器的字节顺序,显然,它是所提供地址的系列。

byte[] ipBytes = ip.GetAddressBytes();
while (ipBytes[0]++ < byte.MaxValue)
{
  var newIp = new IPAddress(ipBytes);
  Console.WriteLine("    {0}", ip);
}