Привет! Начинающие devops инженеры часто задают вопрос: что мне поучить, чтобы стать лучше (привет diablo)? Обычно я отвечаю: поучи команды linux. Но в целом посыл обычно ясен, чтобы что-то учить, надо хотя бы знать название утилит. Цель этой статьи и является ознакомление любопытного читателя с интересными сетевыми утилитами которые есть (или легко устанавливаются) в любом дистрибутиве linux. И так начнем!

ip

Утилита управляет интерфейсами, сетевыми устройствами и туннелями. Всем сетевым стеком linux. Например: 

ip addr 

Покажет список всех сетевых адресов. Тоже самое делает утилита ifconfig без параметров. 

ip route 

Покажет таблицу роутинга. Тоже самое сделает команда route

ip link set eth0 up 

Поднимает интерфейс eth0. Это можно также сделать с помощью ifconfig

Так зачем она нужна если все ее команды можно выполнить с помощью других утилит? Дело в том, что во многие компактные дистрибутивы (например Alpine или openwrt) не используют ifconfig, route и другие “большие” утилит. Там оставляют только ip. Вот с помощью нее и придется выполнять все сетевые задачи. 

nc

Полное имя netcat - на него она тоже откликается. Это утилита, позволяет слушать и выполнять TCP и UDP соединении. 

И так что может netcat? 

Открываем одно окно терминала и делаем там nc -l 12345 это будет наш сервер. Отрываем другое окно и пишем в нем nc 127.0.0.1 12345 — это наш клиент. Печатаем там “Hello!” нажимаем enter. В первом окне видим эту фразу. Ура! Мы написали однонаправленный чат.

Эта утилита пригодиться чтобы проверить жив ли сервер и слушает ли от вообще на этом порту? С помощью nc можно переслать файл и даже просканировать порты. Http сервер еще можно написать.

socat 

Это труба, которая позволяет соединить два сокета между собой. Mysql слушает только на local socket а мы хотим на его ходить по tcp. Выглядит это так: socat TCP-LISTEN:3307,reuseaddr,fork UNIX-CONNECT:/var/lib/mysql/mysql.sock 

Конектор к netcat из предыдущего примера: socat - TCP4:127.0.0.1:80 

Если вам нужно перебросить сокет в другое место присмотритесь к socat он вам скорее всего поможет. 

netstat 

Эта утилита показывает текущее состояние сетевого стека. Она даст вам ответ на вопросы: что у меня там на порту 9081 висит? netstat -nltp Что с моими tcp соединениями и кто прямо сейчас ко мне подключен? netstat -atp 

У этой утилиты есть младший (или старший по возможностям) брат ss посмотрите на него тоже может он понравиться больше.

curl

Утилита для передачи файлов. Так написано в ее описании. Чем же она замечательна? Она умеет кучу протоколов: DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET and TFTP. В каждом протоколе она знает множество версий, например HTTP она может до версии 2. Умеет подставлять хидера, куки, ходить по SSL, использовать proxy разных видов. Можно отлаживать http(s) соединение с помощью -v. Примеры: 

curl http://artscene.textfiles.com/asciiart/unicorn 

Единорог! 

curl -v http://127.0.0.1:12345 

Соединяемся с сервером из примера netcat. В консоле сервера увидим http запрос. После этого все остановиться curl будет ждать ответ. И если вы руками его введете покажет его. 

Заключение 

Автор уверен, если вы изучите эти утилиты вы не только развлечетесь, но и узнаете много нового. Я вот, например узнал адрес, где можно посмотреть на единорога. В общем спасибо за внимание если понравилось лайк, шер. 

Комментарии (26)


  1. Boti4ello
    14.11.2022 21:09
    +3

    спасибо. почерпнул новенького!!! ss - вообще ни разу не слышал.


    1. antonkh Автор
      14.11.2022 21:10
      +2

      Она довольно удобная. У меня руки привыкли к netstat.


      1. chupasaurus
        15.11.2022 07:06
        +7

        За 10 лет с момента deprecation пора было уже отвыкнуть.


        1. crims0n_ru
          15.11.2022 09:38

          Вы путаете с netcat, похоже. Последняя версия net-tools, в которые входит netstat, вышла в прошлом году.


          1. chupasaurus
            15.11.2022 09:45
            +1

            Всё верно, только его подхватили в июне 2013-го, т.е. 12 лет без патчей и уже после того, как Debian c RedHat переехали на iproute2.


    1. FruTb
      16.11.2022 01:16

      Будьте осторожны с поиском документации на ss. Ходил по этим граблям)))))


      1. polar_yogi
        16.11.2022 15:08

        На какие грабли можно наступить набирая man ss?


  1. MechanicusJr
    14.11.2022 23:44

    Это можно также сделать с помощью ifconfig

    Если это КОМАНДА, то почему ее больше нет? ))))))))

    LDAP, LDAPS

    эээ OpenLDAP ?


    1. antonkh Автор
      14.11.2022 23:54
      +1

      Про команду не совсем понял. Это утилита и по умолчанию ее иногда не бывает.
      OpenLDAP - это сервер LDAP(S) это протокол. Как скажем nginx и http(s).


      1. sbr2004
        15.11.2022 00:43
        +1

        Про команду не совсем понял. Это утилита и по умолчанию ее иногда не бывает.

        Вот мы и дожили до времён, когда ifconfig "иногда не бывает" :(


        1. kvazimoda24
          15.11.2022 01:11
          +6

          ifconfig уже так давно сделали depricated, что мне приходится вспоминать её синтаксис, если попадается система без ip.


          1. chemtech
            15.11.2022 01:24

            del


            1. kvazimoda24
              15.11.2022 01:33

              2017 год. Как давно это было...


      1. bolk
        17.11.2022 10:08
        +1

        Вот я сейчас зашёл на RedOS у одного из наших заказчиков и там вполне себе есть ifconfig:

        file $(which ifconfig)
        /usr/sbin/ifconfig: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=4357fab8e7336fed79967480f706af4d4dd70f9c, stripped


    1. chemtech
      15.11.2022 01:25
      +1

      Там целая статья почему отказываются от ifconfig и переходят на ip https://habr.com/ru/post/320278/


      1. antonkh Автор
        15.11.2022 09:30

        Я ее тоже читал! Отличная статья!


    1. arheops
      15.11.2022 02:15
      +1

      ifconfig был баш скриптом использующием ip, ну где-то уже лет 10 как. Не помню точно, было ли она скриптом в rhel5, но в 6 оно уже было эмулировано, а rhel7 не ставится вообще.
      Да, в последних версиях ее надо ставить отдельно почти везде, все просто перешлина ip


      1. polar_yogi
        15.11.2022 11:27
        +2

        Про эмуляцию скриптом, извините, чушь. И в rhel5 и в rhel6 ifconfig - самостоятельный бинарник. В этом просто убедиться, исходники доступны.


    1. aragont
      15.11.2022 11:22
      +2

      LDAP, это, например, запросы в Active Directory. Ниже запрос списка e-mail всех пользователей домена:

      curl --user CN=Administrator,OU=users,DC=example,DC=com 'ldaps://ldap.example.com/DC=example,DC=com?mail?sub?(objectclass=person)'
      

      Формат URL для LDAP можно посмотреть здесь.


  1. ogost
    15.11.2022 03:13
    +6

    Даже не удосужились минимально погуглить.

    ifconfig, route и netstat входят в один пакет net-tools, который на даннный момент имеет статус deprecated.

    Ну и интересные возможности команд показали бы что-ли. Испанский стыд.


    1. anone9465
      15.11.2022 09:40
      -6

      Отличная система кармы, которая позволяет фильтровать контент, а вам все не нравится. Токсичный вы человек.

      /s


  1. phikus
    15.11.2022 09:05

    netstat, а не lsof?!


    1. polar_yogi
      15.11.2022 11:33
      +1

      lsof - list open files
      netstat - Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships
      Т.е. часть информации (о сокетах, например) можно посмотреть и там и там, но в принципе они для разных целей.


  1. aragont
    15.11.2022 11:36
    +1

    Спасибо за статью. Узнал из нее про ss и про разнообразие протоколов, поддерживаемых curl.


  1. ilyakruchinin
    16.11.2022 02:08
    +2

    netstat давным-давно legacy и не должен использоваться.
    Только ss.


    1. antonkh Автор
      16.11.2022 13:30

      Все так. Просто я netstat помню автоматом а ss нужно вспоминать.