Raw Socket - Программирование на C

Я пытаюсь использовать необработанные сокеты с C, чтобы отправить сообщение на свой компьютер по петле (lo), но у меня возникли проблемы и я не мог понять причину, поскольку все, похоже, в порядке в соответствии с ссылки, которые я нашел в Интернете.

Вот как я открываю сокет:

int socket_id = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL));

А вот и моя программа отправки:

#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <net/ethernet.h>
#include <linux/if_packet.h>
#include <linux/if.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <netinet/ip.h>
#include <netinet/udp.h>
#include <netinet/in.h>
#include <unistd.h>


int main() {
    int socket_id = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
    printf("%d\n", socket_id);
    struct sockaddr_in sin;
    char buffer[16] = "Hello, world!";
    int count;

    sin.sin_family = AF_PACKET;
    sin.sin_addr.s_addr = inet_addr("127.0.0.1");
        
    for(count = 1; count <=20; count++) {
        if(sendto(socket_id, buffer, strlen(buffer), 0, (struct sockaddr *)&sin, sizeof(sin)) == -1) {
            perror("sendto() error");
            exit(-1);
        }
        else {
            printf("Count #%d - sendto() is OK.\n", count);
            sleep(2);
        }
    }
    return 0;
}

Я использую необработанные сокеты, потому что в конце я отправлю протоколы Kermit, а пока я просто пытаюсь отправить простой массив символов. Я всегда запускаю программу с помощью sudo (используя Linux), а оператор if всегда возвращает true и завершает программу.

Есть идеи, почему это происходит?

0 ответов

Другие вопросы по тегам