В неотшлифованной версии скрипт Bash -мог бы выглядеть так, предполагая, что ваши данные содержатся вdatafile
:
#!/bin/bash
printf "IPs where status is fail:\n"
grep -z -oP 'IP=\K.*\n(?=STATUS=FAIL)' datafile
printf "Avg time taken by all requests where status is 'success':\n"
grep -z -oP 'STATUS=SUCCESS\nTIME=\K\d+' datafile | \
awk '{ total += $1; count++ } END { print ( count == 0 ? "NaN" : total/count); }'
printf "Number of logins (successful and failed) via Mobile:\n"
grep -c 'Source=Mobile' datafile
Краткое разъяснение:
grep
извлекает значения времени (, которые, как предполагается, все в секундах ). Эти значения передаются в команду awk
, которая вычисляет их среднее значение, а затем печатает это среднее значение. Вы наверняка можете иметь несколько процессов, прослушивающих один и тот же порт, если они привязаны к разным IP-адресам.
Вот демонстрация использованияnc
:
% nc -l 127.0.0.1 1234 &
[1] 24985
% nc -l 192.168.1.178 1234 &
[2] 24988
% netstat -an | grep 1234
tcp4 0 0 192.168.1.178.1234 *.* LISTEN
tcp4 0 0 127.0.0.1.1234 *.* LISTEN
Как видите, я дважды запускал nc
в режиме прослушивания, один из которых был привязан к 127.0.0.1
, другой — к 192.168.1.178
(, которые оказались двумя IP-адресами на этом компьютере ), оба используют порт 1234
.
netstat
показывает два прослушивающих сокета.
Я провел тест на macOS, но в Linux вы можете добавить -p
в netstat, чтобы показать два разных процесса. В macOS вы можете использовать lsof -nP
, чтобы показать то же самое.
Обратите внимание, что, поскольку вы открываете «дыру» в уровне безопасности, вы, вероятно, не хотите привязываться к доступному извне (общедоступному )IP-адресу, иначе любой сможет подключиться к этому IP+порту и добраться до удаленной системы, которую, очевидно, нужно было защитить.
Следует использовать только петлевые IP-адреса (127.0.0.1
, 127.0.0.2
... )или частные IP-адреса в частной сети, доступной только для доверенных систем.
Для полноты уточним, что активное TCP-соединение определяется 4 -кортежами (локальный IP-адрес, локальный порт, удаленный IP-адрес, удаленный порт ), но прослушивающий сокет действительно определяется только локальным ИП и порт. Соединения, установленные с этим сокетом, получат полный кортеж 4 -.
Порт назначается IP-адресу, и вы можете назначить (в Linux, поскольку я знаю )более одного IP-адреса для интерфейса. Но, конечно, могут быть и другие ограничения (, такие как доступные файловые дескрипторы -сокет ()системный вызов возвращает файловый дескриптор или -1 ошибка ).
Ограничение на количество прослушиваемых портов указано для каждого адреса независимо от IPv4 или IPv6. Ограничение исходит из заголовков пакетов TCP и UDP , которые состоят из двух байтов, поэтому номера портов для TCP и UDP могут быть только в диапазоне от0x0000
(0 )до 0xFFFF
(. 65535 ).
Когда какая-либо служба (, включая SSH-сервер ), прослушивает порт, она может выбрать прослушивание одного IP-адреса или каждого IP-адреса. Таким образом, добавление нового адреса не обязательно поможет, если вы не настроите каждую службу для прослушивания одного конкретного IP-адреса.
Однако две или более службы могут совместно использовать один и тот же порт, если они прослушивают разные IP-адреса.
Честно говоря, NAT всегда был чем-то вроде взлома. Потребность в этом отпала в IPv6, где каждая машина имеет собственный общедоступный IPv6-адрес и брандмауэр, ограничивающий входящие соединения, вместо NAT.
Более распространенным подходом к этой ситуации является использование машины-бастиона... пользователи подключаются по ssh к бастиону, а оттуда по ssh к нужной им машине.
Оба IPv4 и IPv6 не имеют концепции порта, только исходный и целевой IP-адреса. Ограничение портов определяется протоколами TCP и UDP .
Если вы хотите расширить лимит начального порта (по умолчанию :1024 ), чтобы добавить еще несколько портов для конечных пользователей, вы можете уменьшить диапазон привилегированных портов до некоторого меньшего числа с помощьюsysctl
:
echo "net.ipv4.ip_unprivileged_port_start=100" > /etc/sysctl.d/privileged_ports.conf
Псевдонимы IP можно использовать для добавления нескольких IP-адресов к одной сетевой карте.
С systemd вы используете.network
файлы:
[Network]
Address=192.168.55.1/24
Address=192.168.55.2/24
Gateway=...