想知道是否有人可以帮助我。我对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 );
}
答案 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);
}