VYR>можно ли получить список всех IP в своей подсети (или только перебором)?
Запустить снифер и отловить все широковещательные arp запросы MAC адреса назначения и собрать SRC IP адреса спрашивающих.
ARP, Request who-has DST-IP tell SRC-IP, length 28
VYR>можно ли получить список всех IP в своей подсети (или только перебором)?
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Threading.Tasks;
public static class NetworkScanner
{
public static uint[] GetIPv4Range(IPAddress ip, IPAddress subnet)
{
var bytes = ip.GetAddressBytes();
Array.Reverse(bytes);
var ip2 = BitConverter.ToUInt32(bytes, 0);
bytes = subnet.GetAddressBytes();
Array.Reverse(bytes);
var sub = BitConverter.ToUInt32(bytes, 0);
var first = ip2 & sub;
var last = first | (0xffffffff & ~sub);
return new[] { first, last };
}
public static List<IPAddress> GetAllIPv4Addresses()
{
var bag = new ConcurrentBag<IPAddress>();
foreach (var ni in NetworkInterface.GetAllNetworkInterfaces())
{
if (ni.OperationalStatus != OperationalStatus.Up)
continue;
foreach (var ip in ni.GetIPProperties().UnicastAddresses)
{
if (ip.Address.AddressFamily != AddressFamily.InterNetwork) continue;
if (ip.Address.Equals(IPAddress.Loopback))
{
bag.Add(ip.Address);
continue;
}
var range = GetIPv4Range(ip.Address, ip.IPv4Mask);
Parallel.For((int)range[0], (int)range[1], i =>
{
var bytes = BitConverter.GetBytes((uint)i);
Array.Reverse(bytes);
bag.Add(new IPAddress(bytes));
});
}
}
return bag.ToList();
}
}