Очередной скрипт пинга сети на bash

Возникла задача найти все живые устройства в сети. Эта задача легко решается с помощью пинга по всем адресам локальной сети и последующей печатью Arp-таблицы хоста. Проблема была лишь в том, что на Bash я ее еще не решал (в отличие от Python/Powershell)…

Чатжпт, по коням, у нас скрипт, возможно, на баше.

Ответ от нейросети я буду приводить в сокращенном виде.

1) Could you please provide me with bash script that:

– takes local network subnet from provided nic interface by parameter or subnet by parameter;

– makes icmp request (ping ip) for each ip in the provided subnet;

– prints all ip/mac pairs for IPv4 related to the provided network.

Let’s think step by step, do not hurry


# Step 2: Generate a list of IP addresses within the subnet

IFS=‘/’ read -ra SUBNET_ARRAY <<< $SUBNET NETWORK=${SUBNET_ARRAY[0]} PREFIXLEN=${SUBNET_ARRAY[1]}

IP_LIST=()

for (( i=1; i <= 254; i++ )); do IP=$NETWORK.$i IP_LIST+=($IP) done


2) Погоди, но сеть может быть с Netmask отличной от 24…


NUM_HOSTS=$((2**(32 – PREFIXLEN) – 2))

for (( i=1; i <= NUM_HOSTS; i++ )); do IP=$NETWORK.$i IP_LIST+=($IP) done


3) Тут я предположил, что неонка просто считает последнюю цифру нулем, почему и образовывает IP путем простого склеивания с адресом подсети, и попросил исправить это.


NETWORK_BASE=${NETWORK_OCTETS[0]}.${NETWORK_OCTETS[1]}.${NETWORK_OCTETS[2]}.$((NETWORK_OCTETS[3] & ~(2**(32 – PREFIXLEN) – 1)))”


4) В целом уже было круто, но нейросеть тупила с формированием списка IP, по прежнему считая адреса вида 192.168.10.64.12 вполне легитимными.

Ок, чатик, подскажи как сложить в баше два числа


# Define your values a and b a=5 b=3

# Perform the addition

result=$((a + b))


5) В конструкции

SUBNET=$(ip addr show $NIC_INTERFACE | grep -oP ‘inet \K[^/]+’)

ты получаешь не адрес ПК с сетевой маской, а просто адрес пк.


To obtain the subnet (including the CIDR notation)

SUBNET=$(ip -o -f inet addr show dev $NIC_INTERFACE | awk ‘{print $4}’)


Конечно, тут отсутствует защита от дурака.

Но все равно ВАУ! Полчаса трудов и результат готов.

 

2 thoughts on “Очередной скрипт пинга сети на bash”

    1. Слишком лехко )
      Ну и результатом будут вообще все соседи, а не наша подсеть ))

Leave a Reply

Your email address will not be published. Required fields are marked *