Изменить последний октет IP-адреса, возвращенного gethostentry - PullRequest
3 голосов
/ 29 сентября 2011

Интересно, может ли кто-нибудь помочь мне здесь? Я не особо с 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 ]

1 голос
/ 11 января 2012

Предполагается, что есть только один сетевой адаптер:

// 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.

0 голосов
/ 29 сентября 2011

Вот довольно хрупкий метод, который основывается на порядке байтов вашей машины и, очевидно, на семействе предоставленных адресов.

byte[] ipBytes = ip.GetAddressBytes();
while (ipBytes[0]++ < byte.MaxValue)
{
  var newIp = new IPAddress(ipBytes);
  Console.WriteLine("    {0}", ip);
}
0 голосов
/ 29 сентября 2011

Вы можете преобразовать его в строку с помощью метода ToString () объекта IPAddress.

Рассматривали ли вы только использование объекта System.Net.IPAddress?

Вот документ наего метод Parse, который берет строку и пытается преобразовать ее в объект IPAddress, так что вы можете делать любую магию строк, которую вы хотите сделать: http://msdn.microsoft.com/en-us/library/system.net.ipaddress.parse.aspx

Или, если вы хотите знать, как преобразоватьстрока в число, попробуйте метод TryParse числового типа данных.Возможно, Int32.TryParse сработает.

...