Использование замены процесса иpaste
:
$ paste <(cut -f2 numbers) <(cut -f1 numbers)
2 1
20 10
200 100
2000 1000
20000 10000
300000 100000
3000000 1000000
Эта задача не очень хорошо подходит для выполнения с помощью утилит командной строки. -Вам лучше выполнять ее в чем-то вроде Perl или Python, если вы можете, где сетевые API намного богаче.
При этом... вы, безусловно, можете использовать netcat для отправки ваших пакетов, передавая шестнадцатеричные данные во что-то вродеxxd
(части пакета vim-common
в RHEL/CentOS/Fedora -YMMV, если вы используя другой дистрибутив Linux... ).
Существует инструмент под названием PacketSender (, которым, признаюсь, я на самом деле не пользовался, но он выглядит интересным, )который включает в себя функциональность командной строки -для того, чтобы делать то, что вы хотите -что я не знаю, чтобы он был упакован для каких-либо дистрибутивов Linux, поэтому вам придется либо собрать его из исходного кода самостоятельно, либо использовать предварительно -упакованный выпуск AppImage автора, если ваш дистрибутив может его использовать.
Это может быть далеко за пределами того, что вы искали, но вы также можете сделать это на C. Вот пример программы, которая отправляет байты в вашем примере:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
/* You'd need to change the following values to match your environment */
#define DESTINATION_ADDRESS "127.0.0.1"
#define DESTINATION_PORT 8080
#define MAX_MESSAGE_LENGTH 11
struct message {
int length;
char bytes[MAX_MESSAGE_LENGTH];
};
int main(void)
{
const int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("socket");
exit(EXIT_FAILURE);
}
const struct message messageList[] = {
{.length = 7,.bytes = { 0x4a, 0x48, 0x43, 0x4d, 0x44, 0xd0, 0x02} },
{.length = 7,.bytes = { 0x4a, 0x48, 0x43, 0x4d, 0x44, 0xd0, 0x02} },
{.length = 7,.bytes = { 0x4a, 0x48, 0x43, 0x4d, 0x44, 0xd0, 0x02} },
{.length = 11,.bytes = { 0x4a, 0x48, 0x43, 0x4d, 0x44, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00} },
{.length = 11,.bytes = { 0x4a, 0x48, 0x43, 0x4d, 0x44, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00} },
{.length = 7,.bytes = { 0x4a, 0x48, 0x43, 0x4d, 0x44, 0x10, 0x00} },
{.length = 7,.bytes = { 0x4a, 0x48, 0x43, 0x4d, 0x44, 0xd0, 0x01} },
{.length = 7,.bytes = { 0x4a, 0x48, 0x43, 0x4d, 0x44, 0xd0, 0x01} },
{ },
};
const struct sockaddr_in servaddr = {
.sin_family = AF_INET,
.sin_port = htons(DESTINATION_PORT),
.sin_addr.s_addr = inet_addr(DESTINATION_ADDRESS),
};
for (int i = 0; messageList[i].length != 0; ++i) {
if (sendto(sockfd,
messageList[i].bytes,
messageList[i].length,
0,
(const struct sockaddr*) &servaddr,
sizeof(servaddr)) < 0) {
perror("sendto");
}
}
close(sockfd);
return EXIT_SUCCESS;
}
Программа создает массив сообщений с именем messageList
. Каждая запись в массиве включает (1 )длину сообщения и (2 )массив байтов в сообщении. Сообщение длины 0 завершает список.
Затем программа создает объект с именем servaddr
, описывающий, куда отправить сообщение и протокол.
Наконец, программа перебирает сообщения одно за другим и отправляет их адресату.
Для компиляции программы:
$ gcc client.c
Это создаст программу с именем a.out
.
Вы можете настроить tcpdump
для просмотра сообщений:
$ sudo tcpdump -i lo -Xn '(udp port 8080)'
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
Затем запуститеa.out
:
$./a.out
И я получаю следующий результат отtcpdump
:
20:18:19.429320 IP 127.0.0.1.58915 > 127.0.0.1.8080: UDP, length 7
0x0000: 4500 0023 bf9f 4000 4011 7d28 7f00 0001 E..#..@.@.}(....
0x0010: 7f00 0001 e623 1f90 000f fe22 4a48 434d .....#....."JHCM
0x0020: 44d0 02 D..
20:18:19.429629 IP 127.0.0.1.58915 > 127.0.0.1.8080: UDP, length 7
0x0000: 4500 0023 bfa0 4000 4011 7d27 7f00 0001 E..#..@.@.}'....
0x0010: 7f00 0001 e623 1f90 000f fe22 4a48 434d .....#....."JHCM
0x0020: 44d0 02 D..
20:18:19.429842 IP 127.0.0.1.58915 > 127.0.0.1.8080: UDP, length 7
0x0000: 4500 0023 bfa1 4000 4011 7d26 7f00 0001 E..#..@.@.}&....
0x0010: 7f00 0001 e623 1f90 000f fe22 4a48 434d .....#....."JHCM
0x0020: 44d0 02 D..
20:18:19.429906 IP 127.0.0.1.58915 > 127.0.0.1.8080: UDP, length 11
0x0000: 4500 0027 bfa2 4000 4011 7d21 7f00 0001 E..'..@.@.}!....
0x0010: 7f00 0001 e623 1f90 0013 fe26 4a48 434d .....#.....&JHCM
0x0020: 4420 0000 0000 00 D......
20:18:19.429979 IP 127.0.0.1.58915 > 127.0.0.1.8080: UDP, length 11
0x0000: 4500 0027 bfa3 4000 4011 7d20 7f00 0001 E..'..@.@.}.....
0x0010: 7f00 0001 e623 1f90 0013 fe26 4a48 434d .....#.....&JHCM
0x0020: 4420 0000 0000 00 D......
20:18:19.430086 IP 127.0.0.1.58915 > 127.0.0.1.8080: UDP, length 7
0x0000: 4500 0023 bfa4 4000 4011 7d23 7f00 0001 E..#..@.@.}#....
0x0010: 7f00 0001 e623 1f90 000f fe22 4a48 434d .....#....."JHCM
0x0020: 4410 00 D..
20:18:19.430539 IP 127.0.0.1.58915 > 127.0.0.1.8080: UDP, length 7
0x0000: 4500 0023 bfa5 4000 4011 7d22 7f00 0001 E..#..@.@.}"....
0x0010: 7f00 0001 e623 1f90 000f fe22 4a48 434d .....#....."JHCM
0x0020: 44d0 01 D..
20:18:19.430652 IP 127.0.0.1.58915 > 127.0.0.1.8080: UDP, length 7
0x0000: 4500 0023 bfa6 4000 4011 7d21 7f00 0001 E..#..@.@.}!....
0x0010: 7f00 0001 e623 1f90 000f fe22 4a48 434d .....#....."JHCM
0x0020: 44d0 01 D..
Обратите внимание, что каждое сообщение начинается с JHCMD
--, что может быть интересно для вашего расследования (, например,https://shkspr.mobi/blog/2020/06/review-wifi-endoscope/).