- Send TCP/UDP Packets on Linux using /dev/tcp & /dev/udp Pseudo Devices
- Base Command
- UDP
- TCP
- 👉 Any questions? Please comment below.
- Share on
- Leave a comment
- You may also enjoy
- [SOLVED] Fix Kubernetes Flannel & CoreDNS Failure with Error: x509: certificate is valid for , , not
- JavaScript: Remove element from Array — by index / value / position / range / filter function (programmatically)
- [SOLVED] Fix Kubernetes Client Certificates Issue with Error: Part of the existing bootstrap client certificate is expired . failed to run Kubelet: unable to load bootstrap kubeconfig: stat /etc/kubernetes/bootstrap-kubelet.conf: no such file or directory
- [SOLVED] Fix npm ERR! code EINTEGRITY , integrity checksum failed , tarball data seems to be corrupted , npm ERR! shasum check failed , npm WARN registry Unexpected warning issues during npm install
- Send and Receive UDP packets via Linux CLI
- Expectations:
- Netcat Command:
- General Set Up Diagram:
- Send UDP packet:
- Start Server:
- Start Client:
- Check Connection:
- Send UDP packets:
- Check packets in Wireshark:
- Other command to send UDP packets:
- Conclusion:
- References:
- About the author
- Bamdeb Ghosh
- RELATED LINUX HINT POSTS
- Как отправить UDP пакет через командную строку Linux?
- Как отправить TCP или UDP пакет в Linux?
- Как отправить TCP пакет на определенный ip:порт в Linux
- Как отправить UDP пакет на определенный ip:порт в Linux
Send TCP/UDP Packets on Linux using /dev/tcp & /dev/udp Pseudo Devices
Pseudo tools like /dev/tcp & /dev/udp can be used to easily send an instant TCP/UDP packet on Linux terminal.
Here is a quick tutorial on sending UDP and TCP data on Linux terminal using /dev/udp and /dev/tcp .
Base Command
UDP
$ echo "This is my UDP message" > /dev/udp/127.0.0.1/30000
TCP
$ echo "This is my TCP message" > /dev/tcp/127.0.0.1/30100
👉 Any questions? Please comment below.
Updated: January 02, 2020
Share on
Leave a comment
You may also enjoy
[SOLVED] Fix Kubernetes Flannel & CoreDNS Failure with Error: x509: certificate is valid for , , not
Use the correct cluster configuration for your control plane when regenerating new certificates
JavaScript: Remove element from Array — by index / value / position / range / filter function (programmatically)
Many ways to remove items from a JavaScript array
[SOLVED] Fix Kubernetes Client Certificates Issue with Error: Part of the existing bootstrap client certificate is expired . failed to run Kubelet: unable to load bootstrap kubeconfig: stat /etc/kubernetes/bootstrap-kubelet.conf: no such file or directory
Renew the expiring/expired Kubernetes PKI (client certificates & keys)
[SOLVED] Fix npm ERR! code EINTEGRITY , integrity checksum failed , tarball data seems to be corrupted , npm ERR! shasum check failed , npm WARN registry Unexpected warning issues during npm install
Clean npm cache, node_modules, package-lock.json files to recover from all ‘npm ERR! code EINTEGRITY’ error messages during ‘npm install’
Send and Receive UDP packets via Linux CLI
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.
Expectations:
Here are the key points to learn from this article
- To understand nc command in Linux.
- Use nc command for sending and receiving UDP packets through network.
- Send some human readable sentences through nc command.
- Capture the UDP packet sent by nc command.
- Check network packet in Wireshark.
- Find out any other command other than netcat for Linux.
Netcat Command:
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.
General Set Up Diagram:
Send UDP packet:
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.
Start Server:
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.
Start Client:
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.
Check Connection:
We can check the below command for the confirmation about client connation to server port.
Send UDP packets:
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
Check packets in Wireshark:
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
Other command to send UDP packets:
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.
Conclusion:
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.
References:
About the author
Bamdeb Ghosh
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
RELATED LINUX HINT POSTS
Linux Hint LLC, editor@linuxhint.com
1309 S Mary Ave Suite 210, Sunnyvale, CA 94087
Privacy Policy and Terms of Use
Как отправить UDP пакет через командную строку Linux?
Имеется устройство, на котором периодически «уходит» время.
Время синхронизируется с помощью фирменной программы.
Это не очень удобно, по этому возникла мысль автоматизировать этот процесс.
Проблема в том, что я не особо понимаю в передачи сетевого трафика.
Программой Wireshark перехватил трафик, который генерируется при нажатии кнопки синхронизации в фирменном приложении.
В Data вижу нечно подобное:
Data: a5a5a5a5a5a5a5a50080feff05005202000001800084018f…
Подскажите пожалуйста, как это заслать через командную строку или объясните почему ни чего ен получится?
Средний 1 комментарий
Хотя конечно же можно и самому налабать простую программку, которая выдает по UDP (обычно такие вещи идут по UDP) данное сообщение. Только надо учесть, что там не просто буквоцифры, а может быть целый протокол, в котором еслит тупо реплеить — нифига не сработает.
Да, судя по тому что мне отвечает nmap:
«Found no matches for the service mask ‘a5a5a5a5a5a5a5a50080feff05005202000001800084018f’ and your specified protocols
QUITTING!»
Понять какой там используется протокол вряд ли получится.
По этому:
1. Попробую уточнить возможность синхронизации времени через командную строку, у разработчика
2. Буду заставлять автокликер кликать на кнопки в спец ПО
anton13ms, На самом деле может оказаться куда проще.
— Все эти a5 переводятся в двоичные числа
— Числа группируются по четыре и по правилам чтения двоичных чисел (младший байт — слева, то есть читаются «от хвоста к голове») переводятся в десятичную систему — и может быть получится либо что-то осмысленное, либо например IP адреса там удастся обнаружить.
anton13ms, Можно примерно так:
Синхронизируете время, ловите пакет. Повторяете через секунду, 10 секунд, минуту, 10 минут, час. Смотрите, какие байты меняются в пакете.
Есть вероятность, что где-то в пакете есть контрольная сумма. С ней сложнее, алгоритмы могут быть самые разные.
Rsa97, Идея хорошая, но я не думаю, что создатели сильно бы морочились. Посмотреть популярные способы подсчета, просчитать вручную и поискать это в пакете — может и повезти.
echo -ne '\xa5\xa5\xa5. ' > /dev/udp/192.168.0.1/5000
Потому что передача по сети — это протокол обмена. И это не UDP или TCP, это протокол более высокого уровня. Протокол обмена должны поддерживать обе стороны, иначе это будет разговор слепого с глухим. Протокол включает в себя формат пакета/потока (список данных, описание данных и двоичного представления этих данных). Без знания протокола вряд ли получится что-то передать так, что бы принимающая сторона это восприняла как свой родной пакет и предприняла бы соответствующие действия.
Протоколы могут быть двоичные и текстовые. В текстовом протоколе (HTTP, SMTP, . ) визуально видны части пакета и в принципе по анализу перехваченных данных можно сделать какие-то выводы.
В двоичном протоколе без описания формата вряд ли что-то можно разобрать. Разве что что-то очень простое. У вас двоичный протокол.
Поэтому, обычно, что бы что-то отправить по какому-то протоколу требуется специализированная утилита, реализующая этот протокол. Например для HTTP утилита — это браузер или какой-нибудь curl.
Бывает, что протокол открытый, т.е. описание доступно в свободном доступе (или его можно купить). Так же часто используются закрытые протоколы, описание которых есть только у его разработчиков. Если у вас открытый протокол то шансы что-то скостылить есть.
Поищите у производителя устройства (спросите на форуме поддержки) фирменную утилиту работающую из командной строки или описание протокола (или конкретно данного пакета для установки времени).
Раз у вас пакет установки времени, то в данных должно присутствовать время. Это может быть какой-то вариант timestamp, например Unix timestamp. Можете попробовать поискать в дампе таймстамп на момент отправки пакета. Имея несколько вариантов пакета можно попытаться сделать какой-то его анализ и попробовать разобрать пакет на составляющие его поля. Сделать реверс инжиниринг.
Еще немного. Обычно для установки времени не достаточно просто отправить 1 пакет с новым временем. Т.е. можно и так, конечно. Но в этом случае потенциально может быть большая не точность, т.к. доставка пакета не моментальна, могут быть задержки при передаче и приеме и все это практически не предсказуемо. И когда приемная сторона установит у себя полученное время, то это время уже может стать не точным. Поэтому для минимизации побочных эффектов задержек используют отдельные протоколы для установки времени и там уже как правило не один пакет.
Для примера можете немного посмотреть в сторону протокола NTP — он используется для синхронизации времени через интернет, это открытый протокол, доступно его описание. Например ваша винда наверняка синхронизируется с каким-то NTP сервером от микрософт, фиг знает где находящимся.
Как отправить TCP или UDP пакет в Linux?
Часто при тестировании каких-либо приложений может возникнуть необходимость проверить, доходят ли определенные пакеты по udp/tcp до адресата, например, при проверке функционирования фаервола или же проверки работоспособности проброса портов. В данной статье будет описан простой способ это сделать с помощью командой строки.
Как отправить TCP пакет на определенный ip:порт в Linux
Для отправки 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:порт в Linux
Для отправки 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