Добавить в корзинуПозвонить
Найти в Дзене

Использование socat в Linux: мощный швейцарский нож для сетевых задач

В мире Linux существует множество утилит для работы с сетью, но одна из самых универсальных — это socat. Её часто называют сетевым швейцарским ножом, и не зря: socat позволяет проксировать трафик между самыми разными источниками и приёмниками, будь то TCP, UDP, сокеты, терминалы, файлы и даже стандартный ввод/вывод. Каждый день на канале выходят полезные и интересные материалы по темам Linux, IT и Opensource. Если вы еще не подписаны, то самое время сделать это! socat (SOcket CAT) — это утилита командной строки, предназначенная для двусторонней передачи данных между двумя точками. Каждая точка может быть практически чем угодно: сетевым портом, Unix-сокетом, файлом, tty-устройством и т.д. На большинстве дистрибутивов Linux socat можно установить из стандартных репозиториев. Для Debian и Ubuntu: sudo apt install socat Для RHEL, CentOS и Fedora: sudo dnf install socat Для Alpine: apk add socat socat [опции] [первая_конечная_точка] [вторая_конечная_точка] Примеры конечных точек: Ранее на к
Оглавление
Использование socat в Linux: мощный швейцарский нож для сетевых задач
Использование socat в Linux: мощный швейцарский нож для сетевых задач

В мире Linux существует множество утилит для работы с сетью, но одна из самых универсальных — это socat. Её часто называют сетевым швейцарским ножом, и не зря: socat позволяет проксировать трафик между самыми разными источниками и приёмниками, будь то TCP, UDP, сокеты, терминалы, файлы и даже стандартный ввод/вывод.

Каждый день на канале выходят полезные и интересные материалы по темам Linux, IT и Opensource. Если вы еще не подписаны, то самое время сделать это!

👨‍💻 Что такое socat

socat (SOcket CAT) — это утилита командной строки, предназначенная для двусторонней передачи данных между двумя точками. Каждая точка может быть практически чем угодно: сетевым портом, Unix-сокетом, файлом, tty-устройством и т.д.

⬇️ Установка

На большинстве дистрибутивов Linux socat можно установить из стандартных репозиториев.

Для Debian и Ubuntu:

sudo apt install socat

Для RHEL, CentOS и Fedora:

sudo dnf install socat

Для Alpine:

apk add socat

✍️ Основной синтаксис

socat [опции] [первая_конечная_точка] [вторая_конечная_точка]

Примеры конечных точек:

  • TCP4:localhost:80 — TCP-соединение к порту 80 на localhost
  • UDP4:example.com:53 — UDP-запрос к example.com на порт 53
  • UNIX-LISTEN:/tmp/sock — Unix-сокет, прослушивающий /tmp/sock
  • STDIN или STDOUT — стандартный ввод/вывод

Ранее на канале выходил материал про другой швейцарский нож - утилиту GREP. Если вы не читали этой статьи, самое время сделать это по ссылку ниже.

📋 Примеры использования

1. Проксирование TCP-порта

Чтобы пробросить локальный порт 8080 на удалённый порт 80:

socat TCP4-LISTEN:8080,fork TCP4:example.com:80

Теперь все подключения к порту 8080 на localhost перенаправляются на example.com:80.

2. TCP в Unix-сокет

Если приложение слушает сокет /var/run/app.sock, можно пробросить его через TCP:

socat TCP-LISTEN:9000,fork UNIX-CONNECT:/var/run/app.sock

Теперь вы можете подключаться к localhost:9000, и запросы будут отправляться в сокет.

3. Проброс UDP

socat UDP-LISTEN:5000,fork UDP:192.168.1.100:6000

Данные, поступающие на порт 5000, будут пересылаться на удалённый адрес 192.168.1.100, порт 6000.

4. Проверка соединения (как telnet)

Можно использовать socat для ручного TCP-подключения:

socat - TCP4:example.com:80

После подключения введите HTTP-запрос вручную, например:

GET / HTTP/1.1
Host: example.com

5. Эмуляция COM-портов с использованием pty

socat -d -d pty,raw,echo=0 pty,raw,echo=0

Команда создаёт два псевдотерминала, которые можно использовать как виртуальные COM-порты, например, для тестирования последовательного соединения.

Если желаете знать больше про ввод/вывод в Linux и их перенаправления, то прочитайте соответствующий материал по ссылке ниже.

🚩 Особенности и полезные флаги

  • fork — позволяет обрабатывать несколько подключений
  • reuseaddr — позволяет повторно использовать один и тот же порт
  • Можно использовать openssl: socat TCP-LISTEN:443,fork,openssl-cert=cert.pem,openssl-key=key.pem TCP:localhost:80

Чтобы узнать больше информации про socat не забывайте пользоваться утилитой man. Как работать с ней рассказал в одной из статей на канале.

🏁 Вместо заключения...

socat — это очень гибкая и мощная утилита, полезная в повседневной работе системных администраторов, DevOps-инженеров и разработчиков. Она может выполнять роль прокси, эмулятора терминала, тестового клиента или просто временного решения. Благодаря своей универсальности socat часто спасает в нестандартных ситуациях.

Эти и многие другие утилиты из арсенала Linux-пользователя не обязательно запускать на своём домашнем устройстве. Всегда можно выбрать сервер от надёжного провайдера Таймвеб и получить за это средства на оплату услуг. Чтобы сделать это перейдите по моей ссылке и в случае оплаты облачного сервера, вы получите 300 рублей на счёт. Ну а если закажите выделенный сервер, то на счёт упадёт 2000!

Облачная инфраструктура для бизнеса — Timeweb Cloud