We already know about two main transport layer protocols like TCP and UDP. For more information about TCP and UDP, you can check the reference section. In this article, we will learn how to send and receive UDP packets via the Linux command-line interface (CLI) using nc (mainly) command.
Here are the key points to learn from this article
Netcat(nc) command is installed by default in Linux OS. Open one terminal [Shortcut Alt+Ctrl+t] and use below command to check if nc is present or not.
Here is the expected output
This is nc from the netcat-openbsd package. An alternative nc is available
in the netcat-traditional package.
usage: nc [-46bCDdhjklnrStUuvZz] [-I length] [-i interval] [-O length]
[-P proxy_username] [-p source_port] [-q seconds] [-s source]
[-T toskeyword] [-V rtable] [-w timeout] [-X proxy_protocol]
[-x proxy_address[:port]] [destination] [port]
This means nc command is already exist in Linux.
Let’s take an example like we will send UDP packet from System A to System B. So, in server-client concept, we have to run server at System B side and client at System A side.
Also we have valid IP addresses.
To start sever using nc command use below command in System B terminal
This command does not have any output to show as of now. This is just listening mode on port 9999.
To connect to server using nc command use below command in System A terminal
Now system A has to connect to System B. So we have provided server IP address and port number.
We can check the below command for the confirmation about client connation to server port.
Now we can send udp packet from System A to B and vice versa.
Now go to system A and send any sentences like
We should able to see this in System B side. Here is the screenshot
We can also send UDP packets from System B to System A.
Go to System B and send sentence like
Here is the screenshot from System B
Here is the screenshot from System A
Now while we have been sending UDP packets from System A to System B and vice verse, we can start Wireshark in either System A or System B. Here we have the capture file, let’s do some analysis and confirm if this server and client communication used UDP protocol.
Note that we will only analyze the first communication:
System A has sent:
We will use filter “udp.port == 9999” to get only related packets in Wireshark. Refer below screenshot for analysis from Wireshark capture:
To know how to use Wireshark refer below link
There is another method to send UDP packets
Run below command at System A:
$ echo -n «hello» >/ dev / udp / 192.168.1.102 / 8000
192.168.1.102: System B’s IP
8000 : The server port
Message sent: “hello”
But we are able to send only one time “hello”. If we kill server and rerun then it’s working.
From the above exercise we have learned the mechanism to send some messages using UDP protocol. And the best method is to use nc command in Linux.
Bamdeb Ghosh is having hands-on experience in Wireless networking domain.He’s an expert in Wireshark capture analysis on Wireless or Wired Networking along with knowledge of Android, Bluetooth, Linux commands and python. Follow his site: wifisharks.com
Linux Hint LLC, editor@linuxhint.com
1309 S Mary Ave Suite 210, Sunnyvale, CA 94087
Privacy Policy and Terms of Use
Библиотека сайта rus-linux.net
$ while true; do nc -u localhost 5000; done
$ nc -lp 5000 | sudo dd of=/backup/sdb.img.gz
На локальном узле, на котором установлен жесткий диск:
$ dd if=/dev/sdb | gzip -c | nc remote_server.com 5000
$ nc -lp 5000 | gunzip -c | sudo dd of=/dev/sdb
На удаленном сервере, на котором сохранен файл образа жесткого диска (например, /backup/sdb.img.gz):
$ cat /backup/sdb.img.gz | nc my_local_host.com 5000
Выполните приведенную ниже команду для запуска веб-сервера, который будет передавать веб-страницу с именем test.html клиентам, соединяющимся с портом 8000.
Теперь проверьте доступность веб-страницы, перейдя с помощью веб-браузера по адресу: http://:8000/test.html . Обратите внимание на то, что для использования стандартного порта веб-сервера под номером 80 вам придется запустить nc с привилегиями пользователя root следующим образом:
$ while true; do sudo nc -lp 80 < test.html; done
На первом узле (192.168.233.203):
После выполнения двух приведенных выше команд все символы, введенные в окно терминала на любом из узлов появятся в окне терминала другого узла.
На удаленном узле (192.168.233.208):
После выполнения приведенной выше команды на локальном узле вы сможете выполнять любые команды на удаленном узле посредством окна терминала локального узла. Команды будут выполняться на удаленном узле, при этом вывод этих команд будет появляться в окне терминала локального узла. Данный подход может использоваться для создания бэкдора на удаленном узле.
$ while true; do nc -l 5000 0 proxypipe; done
Приведенные выше команды позволяют создать именованный канал proxypipe и использовать утилиту nc для перенаправления всех соединений по протоколу TCP с портом 5000 локального узла на веб-сайт http://www.google.com посредством двунаправленного канала. После выполнения этих команд вы сможете попасть на главную страницу поисковой системы Google, введя в адресную строку веб-браузера адрес http://127.0.0.1:5000.
$ while true do; openssl s_client -connect www.google.com:443 -quiet < proxypipe >proxypipe2; done
Приведенные выше команды позволяют использовать утилиту nc для создания прокси-сервера с поддержкой протокола SSL, позволяющего устанавливать соединения с веб-сайтом google.com.
На сервере потоковой передачи видео (192.168.233.208):
$ nc 192.168.233.208 5000 | mplayer -vo x11 -cache 3000 -
Приведенные ниже команды позволяют утилите nc использовать адрес IPv6 при приеме соединений на TCP-порту. Это может понадобиться в процессе тестирования корректности настройки адресации IPv6 в сети.
$ sudo netstat -nap | grep 5000 tcp6 0 0 . 5000 . * LISTEN 4099/nc
Часто при тестировании каких-либо приложений может возникнуть необходимость проверить, доходят ли определенные пакеты по udp/tcp до адресата, например, при проверке функционирования фаервола или же проверки работоспособности проброса портов. В данной статье будет описан простой способ это сделать с помощью командой строки.
Для отправки tcp пакета на определенный IP адрес и определенный порт, можно воспользоваться следующей командой:
echo -n "test" >/dev/tcp/1.2.3.4/12345
1.2.3.4 - это IP адрес, на который мы будем посылать наш tcp пакет.
12345 - это порт, на который мы будем посылать наш tcp пакет Альтернативным вариантом может быть использование утилиты nmap:
sudo nmap -sT -p 12345 1.2.3.4
Для отправки udp пакета на определенный IP адрес и определенный порт, можно воспользоваться следующей командой:
echo -n "test" >/dev/udp/1.2.3.4/12345
1.2.3.4 - это IP адрес, на который мы будем посылать наш udp пакет.
12345 - это порт, на который мы будем посылать наш udp пакет Альтернативным вариантом может быть использование утилиты nmap:
sudo nmap -sU -p 12345 1.2.3.4
Проверить получение tcp и udp пакетов на определенный порт на удаленном компьютере можно с помощью различных утилит, например, с помощью tcpdump.
tcpdump -i eth0 port 12345 -vvv -X
Adblock