/
bvs22
/
draft
Обзор
Документация
Войти
/
bvs22
/
draft
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
network/raw_socket/client.c
55 строк
1 KB
Batomunkuev Vladimir
123
19 фев 2025, 16:09
19 фев 2025, 16:09
7a3db42
Код
Авторство
О чём код?
#include <stdio.h> #include <netinet/in.h> #include <sys/socket.h> #include <string.h> #include <arpa/inet.h> #include <stdlib.h> struct udp_header { uint16_t src_port; uint16_t dest_port; uint16_t length; uint16_t checksum; }; int main() { int fd_socket; struct sockaddr_in addr_dest; char buffer[256] = {0}; char *msg = "Hello"; char packet[4096] = {0}; struct udp_header udp_header; fd_socket = socket(AF_INET, SOCK_RAW, IPPROTO_UDP); printf("Сокет создан\n"); memset(&addr_dest, 0, sizeof(addr_dest)); addr_dest.sin_family = AF_INET; addr_dest.sin_port = htons(7777); addr_dest.sin_addr.s_addr = inet_addr("192.168.1.1"); udp_header.src_port = htons(6666); udp_header.dest_port = htons(7777); udp_header.length = htons(strlen(msg) + sizeof(udp_header)); udp_header.checksum = 0; memcpy(packet, &udp_header, sizeof(udp_header)); memcpy(packet + sizeof(udp_header), msg, strlen(msg)); int packet_len = sizeof(udp_header) + strlen(msg); printf("Данные отправлены\n"); sendto(fd_socket, packet, packet_len, 0, (struct sockaddr *)&addr_dest, sizeof(addr_dest)); printf("Ожидаем получения данных\n"); int n = recv(fd_socket, buffer, sizeof(buffer), 0); buffer[n] = '\0'; printf("%s\n", buffer); close(fd_socket); return 0; }