Как я могу протестировать, устанавливается ли соединение с данным хостом/портом в Bash?

Никакой реальный шанс того, чтобы заставлять AIX работать на Вашем ноутбуке, лучший способ учиться состоит в том, чтобы купить старую машину и делать попытку на реальных аппаратных средствах (сами аппаратные средства PPC являются очень отличающимся, другим процессом начальной загрузки и т.д.). Необходимо смочь найти дешевую рабочую станцию IBM на eBay за несколько сотен долларов, модель 275 с 4 ГБ RAM должна быть достаточной для выполнения AIX для тестирования.

Стоящий учета то, что более или менее все новое развертывание AIX виртуализируется, или использующий виртуализацию аппаратного уровня или контейнеры в установке AIX. К сожалению, самые дешевые аппаратные средства для этого - (afaik) что-то как p520 сервер (выполняющий сервер VIO), который будет стоить Вам, по крайней мере, 2k доллар США на eBay или подобный.

3
19.09.2011, 17:12
5 ответов

Что касается элегантности, я изменил бы две вещи в Вашей команде:

  • Как упомянуто в комментарии Chris, можно использовать -q вместо перенаправления вывода.
  • Используйте тот grep вместо два:

    if netstat -an | grep -q " $address:$port .* ESTABLISHED"; then
    
3
27.01.2020, 21:10
  • 1
    I, не используя grep, когда нет никакой потребности в regexps fgrep соответствия лучше. –  poige 13.04.2012, 07:48
  • 2
    @poige, Но здесь у Вас действительно есть regexp. И использование fgrep (или скорее grep -F, с тех пор fgrep удерживается от использования), в этом случае бесполезно также из-за незначительного потенциального преимущества скорости в единственном вызове. Потребовалось бы намного больше времени к типу a (дольше) работающему фильтр с fgrep - и это должно было бы использовать канал, так же, как в примере OP. –  rozcietrzewiacz 13.04.2012, 09:40
  • 3
    Мое плохое, я пропустил его. Относительно fgrep: 1) человек GNU может назвать его, удержал от использования то (что), но ни один не делает BSD's или Solaris. Таким образом, я не забочусь о дополнительном вводе -f к grep, никакой совет, делающий это любому. :) –  poige 14.04.2012, 19:27
  • 4
    2), много людей ухаживает вслепую за использованием grep и расходы их время в выходе из его спецификации. символы, или что является хуже путем, получая неправильные результаты, забывавшие выйти из такого symbs.. Посмотрите, $address Вы использовали в Вашем grep на самом деле имеет ту спецификацию. symbs. — точки. Это - дефект на самом деле. –  poige 14.04.2012, 19:27
  • 5
    Не только вначале, существует порт также, где, сказать :80 соответствовал бы ":80anything" — вот почему я поддерживаю использование решения ss. И да, когда существует разделитель как :, точки могут быть безопасными. Но иначе 192.168.1.4 отлично соответствует целым 192.168.104, для, например, –  poige 15.04.2012, 07:27

lsof должен сделать задание. Попросите, чтобы это дало Вам вывод машины-parseable с -F опция.

lsof -n -i @${hostname}:${port} -F nT | grep '^TST=ESTABLISHED$'

Если Вам нужно больше информации:

lsof -n -i -F nT | awk '
    function host_port(s, a) {
        match(s, /:[^:]*$/);
        a["host"] = substr(s, 1, RSTART-1);
        a["port"] = substr(s, RSTART+1);
    }
    sub(/^p/,"") {pid = $0}
    sub(/^n/,"") {
        split($0, endpoints, "->");
        host_port(endpoints[1], from);
        host_port(endpoints[2], to);
    }
    /^TST=ESTABLISHED$/ {
        print "Established from", from["host"] ":" from["port"],
              "to", to["host"] ":" to["port"]
    }
'
2
27.01.2020, 21:10

Это работает достаточно хорошо на данный момент для Linux.

В других системах UNIX (те у меня есть руки, Mac OS X и Солярис), порт разделяется . вместо :.

И это, скорее всего, перестанет работать для любого соединения IPv6. netstat усекает адреса IPv6, поэтому удостоверьтесь, что использовали --wide. Но снова, это не портативная опция.

1
27.01.2020, 21:10

Можно использовать lsof вместо netstat: что-то вроде этого: sudo /usr/sbin/lsof -i tcp@1.2.3.4:80, но lsof только доступен пользователю root и часто не установленный по умолчанию, таким образом, это - дополнительная внешняя зависимость.

1
27.01.2020, 21:10

с ss:

if ss -n -o state established '( dport = $hostname:$portnumber )'|awk 'NR==2{exit 0}END{exit 1}';then 
2
27.01.2020, 21:10

Теги

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