Echo server on linux
В Linux есть программа Netcat (исполняющийся бинарник называется nc ). И еще есть программа Ncat (исполняющийся бинарник называется ncat ). Их не следует путать, это две разные программы, хотя выпоняют примерно одну и ту же работу.
Организовать эхо-сервер на нужном порту можно и с помощью nc , и с помощью ncat . Сделать эхо-сервер через nc несколько сложнее, потому что существует несколько вариаций этой программы с разными опциями.
nc -l -p 1565 -c ‘xargs -n1 echo’
Проверить работу эхо-сервера можно через nc. Для этого вначале проверям, чтобы на сервере была запущена команда создания эхо-сервера. Потом на клиенте выполняем команду:
Где 10.10.18.25 — это IP-адрес эхо-сервера, ну а 1565 — порт. Опция -v говорит о том, чтобы в консольвыводилась техническая информация о подключении. В принципе ,тех. информация будет выведена только один раз в момент подключения.
После подключения, на клиенте, можно построчно набрать символы на клавиатуре, нажимать Enter, строки будут уходить на сервер и возвращаться. На экране будут появляться копии введенных строк. Это и есть эхо сервер.
Данный сервер работает только с одним соединением. После разрыва соединения (Ctrl+C на клиенте или на сервере), для включения эхо-сервера нужно снова дать команду создания сервера. Эхо-сервер запустится и снова будет ждать первое подключение.
- Как примонтировать SMB диск с русскими именами файлов, другие опции Samba
- wget — основные параметры
- Маскарадинг (masquerading) и трансляции ip-адресов (NAT)
- Используем 2+ провайдера
- Как в Linux узнать какая программа слушает порт
- Отправляем бекап на почту
- Прокси сервера для фильтрации контента
- Privoxy — прокси-сервер для фильтрации веб-содержимого
- Что делать, если каталог был примонтирован через smbmount, а потом Windows был выключен
- OpenSSH: настройки, секреты, трюки и советы
- Написание HTTP-запросов с помощью Curl
- Как быстро узнать, какой веб-сервер используется на сайте
- Как удалить сетевое соединение с указанным IP и номером порта
- Как отключить ответ на запросы с указанного IP (борьба с DDOS атаками)
- Как сделать маршрутизацию, чтобы при недоступности одного шлюза траффик шел через другой
- Как в Linux вывести все переменные окружения, с которыми работает процесс
- Как настроить автоматическую перезагрузку через 10 секунд после kernel panic
- Как посмотреть в содержимое initrd, собранного mkinitramfs
- Как быстро проверить Linux сервер на предмет взлома
- Защита от DDoS с iptables и ipset
- Как быстро узнать список машин в сети
- Как бороться с DDOS атакой
- Где прописывать правила фаирвола
- Интернет через ICMP
- Как проверить свой сайт на стандартные уязвимости
- Почтовый сервер со всем фаршем на 10.04 LTS
- Как залогиниться через WGET с сохранением кук
- Выкачивание набора файлов с ресурса, на который вначале требуется сделать вход через логин-пароль
- SSH: как настроить доступ к домашнему компьютеру, скрытому за NAT
- Как в Linux посмотреть, какие запросы идут по сети в реальном времени
- Как в Linux быстро просмотреть список активных сетевых соединений
- Zabbix: Обслуживание сети, автоматизация администрирования
- Мониторинг коммутаторов Cisco, D-Link, 3Com, Zyxel в системе Zabbix
- Как в Debian, перенесенном (скопированном) с другого раздела заставить идти нумерацию eth интерфейсов с нуля
- Что делать, если отключилось соединение sshfs
- Пример сети класса C (C1, C2, . )
- Как присвоить одной сетевой карте несколько IP адресов
- Формат конфиг-файла iptables
- Настройка iptables для чайников от losst.ru
- Методичка по настройке iptables в Linux
- Основные понятия iptables в Linux — подробное объяснение приниципа работы и формата конфигов
- Как безопасно проверить конфигурационный файл iptables
- Как настроить сервер SSH чтобы постоянно на разрывалось соединение
- Как примонтировать диск через SSH
- Особенности настройки фаирвола iptables в Debian 7.4
- Как сделать эхо-сервер на конкретном порту в Linux
- Nmap. Начало использования
- DNS туннель через закрытый WiFi
- Как скачивать через youtube-dl. Опции команды.
- Просмотр ARP таблиц в Windows и Linux
- Как посмотреть открытые файлы на SAMBA сервере
- Быстрая настройка dnsmasq в качестве DNS-сервера в Debian Linux 8.5
- Как в Debian Linux разрешить вход по паролю для root через ssh
- Как пропинговать хост по MAC адресу
- Настройка сети в RedHat (RHEL) 7 Linux и Fedora 25 через консоль
- Как в Linux найти все компьютеры в сети
- Уровни модели OSI
- Структура пакета IPv4
- Структура пакета TCP (формат заголовка сегмента)
- Настройка интернет соединения (PPPoE) для Linux
- Настройка PPPoE в Network Manager под Linux
- Какие пакеты нужны, чтобы примонтировать ресурс по NFS
- Утилита ip в Linux
- Как подключиться к WiFi, минуя SMS аутентификацию. Как узнать MAC адрес уже подключенного пользователя. Как подменить MAC-адрес.
- Вход в публичные защищенные Wi-Fi сети путем спуфинга MAC-адреса
- Как в Debian Linux настроить сеть через команду ip
- О чем говорит ошибка «RTNETLINK answers: File exists»
- Подключение компьютера с Linux к сети Интернет через USB-кабель и телефон с Android
- Исправление работы сети в Debian 9
- Настройка сети — пример файла конфигурации /etc/network/interfaces в Debian Linux
- Как создать сетевое соединение между двумя компьютерами по COM-порту в Linux
- Как настроить кодировку UTF-8 в minicom
- Как в Linux узнать MAC-адрес по IP-адресу
- Как получить информацию о домене через утилиту whois
- Как установить и запустить ntop в Debian Linux 11
Socket Echo Server¶
The echo-server sample application for Zephyr implements a UDP/TCP server that complements the echo-client sample application: the echo-server listens for incoming IPv4 or IPv6 packets (sent by the echo client) and simply sends them back.
The source code for this sample application can be found at: samples/net/sockets/echo_server.
Requirements¶
Building and Running¶
There are multiple ways to use this application. One of the most common usage scenario is to run echo-server application inside QEMU. This is described in Networking with QEMU .
There are configuration files for different boards and setups in the echo-server directory:
- prj.conf Generic config file, normally you should use this.
- overlay-ot.conf This overlay config enables support for OpenThread.
- overlay-802154.conf This overlay config enables support for native IEEE 802.15.4 connectivity. Note, that by default IEEE 802.15.4 L2 uses unacknowledged communication. To improve connection reliability, acknowledgments can be enabled with shell command: ieee802154 ack set .
- overlay-bt.conf This overlay config enables support for Bluetooth IPSP connectivity.
- overlay-qemu_802154.conf This overlay config enables support for two QEMU’s when simulating IEEE 802.15.4 network that are connected together.
- overlay-tls.conf This overlay config enables support for TLS.
- overlay-tunnel.conf This overlay config enables support for IP tunneling.
Build echo-server sample application like this:
west build -b samples/net/sockets/echo_server -- -DCONF_FILE=
Example building for the nrf52840dk_nrf52840 with OpenThread support:
west build -b nrf52840dk_nrf52840 samples/net/sockets/echo_server -- -DCONF_FILE="prj.conf overlay-ot.conf" west build -t run
Example building for the atsamr21_xpro with RF2XX driver support:
west build -b [atsamr21_xpro | sam4e_xpro | sam_v71_xult] samples/net/sockets/echo_server -- -DEXTRA_CONF_FILE=overlay-802154.conf west flash
In a terminal window you can check if communication is happen:
Enabling TLS support¶
Enable TLS support in the sample by building the project with the overlay-tls.conf overlay file enabled, for example, using these commands:
west build -b qemu_x86 samples/net/sockets/echo_server -- -DCONF_FILE="prj.conf overlay-tls.conf"
An alternative way is to specify -DEXTRA_CONF_FILE=overlay-tls.conf when running west build or cmake .
The certificate used by the sample can be found in the sample’s src directory. The default certificates used by Socket Echo Server and Socket Echo Client enable establishing a secure connection between the samples.
Running echo-client in Linux Host¶
There is one useful testing scenario that can be used with Linux host. Here echo-server is run in QEMU and echo-client is run in Linux host.
To use QEMU for testing, follow the Networking with QEMU guide.
Run echo-server application in QEMU:
west build -b qemu_x86 samples/net/sockets/echo_server west build -t run
$ sudo ./echo-client -i tap0 2001:db8::1
Note that echo-server must be running in QEMU before you start the echo-client application in host terminal window.
You can verify TLS communication with a Linux host as well. See https://github.com/zephyrproject-rtos/net-tools documentation for information on how to test TLS with Linux host samples.
See the Socket Echo Client documentation for an alternate way of running, with the echo-server on the Linux host and the echo-client in QEMU.
© Copyright 2015-2023 Zephyr Project members and individual contributors. Last updated on Jul 17, 2023.
How to make an Echo server with Bash?
How to write a echo server bash script using tools like nc, echo, xargs, etc capable of simultaneously processing requests from multiple clients each with durable connection? The best that I’ve came up so far is
nc -l -p 2000 -c 'xargs -n1 echo'
5 Answers 5
If you use ncat instead of nc your command line works fine with multiple connections but (as you pointed out) without -p.
ncat -l 2000 -k -c 'xargs -n1 echo'
P.S. with the original the Hobbit’s netcat (nc) the -c flag is not supported.
Update: -k (—keep-open) is now required to handle multiple connections.
Thanks! It works but with a minor change — we should use it without the «-p» option: ncat -l 2000 -c ‘xargs -n1 echo’
ncat -l 2000 --keep-open --exec "/bin/cat"
ncat -l 2000 --keep-open --udp --exec "/bin/cat"
Beware though, that with —udp , ncat will keep the «connections» open and if you don’t want to hit the default limit of 100 connections, then you should either increase the maximum with the —max-conns option or let the «connections» die after an idle timeout that you can set with —idle-timeout .
In case ncat is not an option, socat will also work:
socat TCP4-LISTEN:2000,fork EXEC:cat
The fork is necessary so multiple connections can be accepted. Adding reuseaddr to TCP4-LISTEN may be convenient.
netcat solution pre-installed in Ubunutu
The netcat pre-installed in Ubuntu 16.04 comes from netcat-openbsd , and has no -c option, but the manual gives a solution:
sudo mknod -m 777 fifo p cat fifo | netcat -l -k localhost 8000 > fifo
echo abc | netcat localhost 8000
TODO: how to modify the input string value? The following does not return any reply:
cat fifo | tr 'a' 'b' | netcat -l -k localhost 8000 > fifo
The remote shell example however works:
cat fifo | /bin/sh -i 2>&1 | netcat -l -k localhost 8000 > fifo
I don’t know how to deal with concurrent requests simply however.
echo server with netcat or socat
I want a UDP echo server to get packets, and reply exactly what it has received. How can I simply do this using netcat or socat ? It should stay alive forever and handle packets coming from several hosts.
Please don’t make this thing Internet-accessible. Since it’s UDP-based it can be used to send a packet stream to arbitrary destinations using source-forged packets.
6 Answers 6
Another netcat-like tool is the nmap version, ncat , that has lots of built in goodies to simplify things like this. This would work:
-e means it executes /bin/cat (to echo back what you type)
-k means keep-alive, that it keeps listening after each connection
-u means udp
-l 1235 means that it listens on port 1235
I used socat -v PIPE udp-recvfrom:5553,fork to run the server and socat — udp:localhost:5553 for clients. This was a great help!
An alternative, coming from stackoverflow.com/a/35857095/222529 is socat TCP4-LISTEN:2000,fork EXEC:cat
You can also use socat (rather than using netcat) as echo server and netcat as client.
Socat echo server (listens on TCP port 1234):
socat -v tcp-l:1234,fork exec:'/bin/cat'
Netcat client (connects to serverip on TCP port 1234):
netcat solution pre-installed in Ubunutu
The netcat pre-installed in Ubuntu 16.04 comes from netcat-openbsd , and has no -c option, but the manual gives a solution:
sudo mknod -m 777 fifo p cat fifo | netcat -l -k localhost 8000 > fifo
echo abc | netcat localhost 8000
TODO: how to modify the input string value? The following does not return any reply:
cat fifo | tr 'a' 'b' | netcat -l -k localhost 8000 > fifo
The remote shell example however works:
cat fifo | /bin/sh -i 2>&1 | netcat -l -k localhost 8000 > fifo
I don’t know how to deal with concurrent requests simply however.