Анализ подсетей с нотацией CIDRC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Анализ подсетей с нотацией CIDR

Сообщение Anonymous »

Проблема со сканером ARP.
У меня есть функции для анализа введенных подсетей в диапазоне IP-адресов, которые я могу перебирать, чтобы отправлять запросы ARP в сеть и возвращать действующие хосты в сети. .
Я вижу, что приложение Wireshark генерирует пакеты ARP, но с неправильными подсетями.
Например, когда я ввожу подсеть 192.168.1.1/24 в Wireshark я вижу 1.1.168.X вместо 192.168.1.X
Изображение
Также по какой-то причине он не работает с 192.168.1.0/24, только с 192.168.1.1/24 с нулем на конце он ничего не делает.
Это код для сканера:
[DllImport("iphlpapi.dll", ExactSpelling = true)]
private static extern int SendARP(int DestIP, int SrcIP, byte[] pMacAddr, ref uint PhyAddrLen);

private static uint macAddrLen = (uint)new byte[6].Length;

private async Task PerformArpScan()
{
ScanResults.Clear();
foreach (var subnet in Subnets)
{
var (networkAddress, cidr) = ParseSubnet(subnet);
var hosts = GenerateIPRange(networkAddress, cidr).ToList();

var results = new ConcurrentBag();

await Task.Run(() =>
{
Parallel.ForEach(hosts, new ParallelOptions { MaxDegreeOfParallelism = 20 }, ip =>
{
var result = SendArpRequest(ip);
if (result != null)
{
results.Add(result);
}
});
});

await Dispatcher.InvokeAsync(() =>
{
foreach (var result in results)
{
ScanResults.Add(result);
}
});
}
}

private ScanResult SendArpRequest(IPAddress ipAddress)
{
byte[] macAddr = new byte[6];
uint macAddrLen = (uint)macAddr.Length;

try
{
int result = SendARP(BitConverter.ToInt32(ipAddress.GetAddressBytes().Reverse().ToArray(), 0), 0, macAddr, ref macAddrLen);

if (result == 0)
{
string macAddressString = string.Join(":", macAddr.Take((int)macAddrLen).Select(b => b.ToString("X2")));
return new ScanResult
{
IpAddress = ipAddress.ToString(),
MacAddress = macAddressString,
Status = "Online",
OpenPorts = "N/A"
};
}
}
catch (Exception ex)
{
Console.WriteLine($"Error sending ARP request to {ipAddress}: {ex.Message}");
}

return null;
}

private (IPAddress, int) ParseSubnet(string subnet)
{
var parts = subnet.Split('/');
var ip = IPAddress.Parse(parts[0]);
var cidr = int.Parse(parts[1]);

// Ensure we're using the network address
var ipBytes = ip.GetAddressBytes();
var mask = uint.MaxValue cidr);

for (uint i = startIP + 1; i < endIP; i++)
{
yield return new IPAddress(BitConverter.GetBytes(i));
}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... r-notation
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Анализ подсетей с нотацией CIDR
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Анализ подсетей с нотацией CIDR
    Anonymous » » в форуме C#
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Запись в свойство объекта, обозначенное точечной нотацией [дубликат]
    Anonymous » » в форуме Javascript
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Как я могу показать небольшие цифры с научной нотацией в Pandas DataFrame Python?
    Anonymous » » в форуме Python
    0 Ответы
    44 Просмотры
    Последнее сообщение Anonymous
  • Как я могу использовать регулярное выражение, чтобы проверить, является ли строка научной нотацией или нет?
    Anonymous » » в форуме JAVA
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»