Как получить сетевую маску от удара?

Использовать ssh -t ... вызвать pseudo-tty выделение (который является тем, что Вы получаете, когда Вы обычно входите в систему через ssh.)

9
09.11.2011, 01:46
6 ответов

Я должен разъяснить, что код здесь работает на Linux, (отметьте комментарии и сообщение о других Нельдах). OP попросила решение Linux, но будет хорошо изменить вопрос, "как получить сетевую маску" в целом и иметь объединение ответа лучший способ для большего количества разновидностей Unix.

#!/bin/sh
ifconfig "$1" | sed -rn '2s/ .*:(.*)$/\1/p'

./script eth0

О ifconfig в Linux

Наряду с другими традиционными сетевыми командами как netstat, arp, rarp и маршрут, ifconfig является частью пакета сетевых инструментов. Сетевые инструменты не были активно разработаны с действительно долгого времени и существуют усилия удержать от использования его в пользу более нового iproute2 пакета. Ради краткости, если Вы хотите больше деталей об этом фундаментальном переходе, вот некоторые необходимые ссылки:

Пример случая: Debian Linux

Пример случая: Дуга Linux

Страница справочника для сетевых инструментов ifconfig (см. раздел BUGS),

Анализ и сравнение платформ с пользовательской точки зрения

9
27.01.2020, 20:04
  • 1
    Если рассматриваемый интерфейс не имеет никакой сетевой маски, это решение возвращается '1'. regex нужно, некоторые серьезные переделывают для создания его надежным/безопасным включая потребность в надлежащей привязке на очень важном слове 'Mask'. –  Oliver Dungey 05.12.2017, 18:35
/sbin/ifconfig eth0 | awk '/Mask:/{ print $4;} '

?

7
27.01.2020, 20:04
  • 1
    Вы отсутствуете |, сокращает-c6-, чтобы также снять "Маску": –  michelemarcon 08.11.2011, 16:52
  • 2
    Определение awk разделителя полей также работает для удаления "Маски":: /sbin/ifconfig eth0 | awk -F: '/Mask:/{print $4}' –  Shane 16.09.2016, 23:57
  • 3
    В Debian Stretch/net-tools, с 2.10 альфами, я должен был измениться на это: /sbin/ifconfig eth0 | awk '/netmask/{print $4}' –  Shane 10.12.2017, 08:30

при использовании ОС, которая производит маску в шестнадцатеричном числе, можно сделать что-то как:

#!/usr/bin/bash

# read the mask, and strip leading 0x if it's there
hexmask=$( echo $1 | sed -e 's/^0x//' )

# loop through $hexmask in pairs
#
for (( i=0; i<${#hexmask}; i+=2 )); do
        if (( $i > 1 )); then
                # use a . to separate octets
                # but don't print a leading .
                printf "%s" "."
        fi
        printf "%d" "0x${1:$i:2}"
done

printf "\n"
3
27.01.2020, 20:04
/sbin/ifconfig eth0 | grep Mask | cut -d":" -f4
1
27.01.2020, 20:04
  • 1
    Это - лучший ответ к настоящему времени, поскольку остальные полагаются на постоянное число использования столбцов awk который не имеет место в реальной жизни с ifconfig. Я предложил бы несколько изменений хотя: ifconfig eth0 | grep -o 'Mask:[^\s]*' | cut -d':' -f2. -o так, чтобы grep только часть возвратов строки, а не (более эффективных) всех. Соответствуйте непробельным символам ([^\s]*) найти конец маркера сетевой маски. Одинарные кавычки вокруг разделителя полей для безопасности. –  Oliver Dungey 06.12.2017, 13:20

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

В этом случае, на Linux, можно также проанализировать вывод ip ... команда.

Перечислять все интерфейсы с их адресом и маской в нотации CIDR:

ip -o -f inet addr show | awk '/scope global/ {print $2, $4}'

Или ограничить его интерфейсом по умолчанию:

default_if=$(ip route list | awk '/^default/ {print $5}')
ip -o -f inet addr show $default_if | awk '{print $4}'

который дает мне "192.168.1.61/24" на моей машине.

6
27.01.2020, 20:04

Если вы ищете сетевую маску для сетевого устройства по умолчанию, эта команда возвращает устройство по умолчанию, поскольку устройство по умолчанию может быть не eth0

netdevice=$(ip r | grep default | awk '/default/ {print $5}')

И эта команда извлекает маску:

netmask=$(ifconfig "$netdevice" | awk '/netmask/{ print $4;}')

Спасибо Элии Кагану и Пауло Томе, которые помогли мне упростить и уточнить ответ. На моем личном компьютере сетевым устройством по умолчанию было «wlx504654c1a91», которое было слишком сложным для точного запоминания и ввода, отсюда и двухэтапный процесс.

1
27.01.2020, 20:04

Теги

Похожие вопросы