Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2013, 17:22   #1
CraZZZy-GameRRR
Пользователь
 
Регистрация: 15.04.2010
Сообщений: 98
Вопрос Ошибка при отправке ip пакета

Начал изучать сырые сокеты. Написал простую функцию отправки IP-пакета. При вызове WSASocket возникает ошибка 10047 WSAEAFNOSUPPORT. Вопрос - почему?


Код:
void CRAWSocketsDlg::OnSend()
{
    #define RS_IP_VERSION 0x40
 
    SOCKET hSocket;
    char opt = 1;
    ip_header ip_hdr;
    unsigned short
        ver = 4,
        ip_hdr_len = sizeof(struct ip_header),
        ip_pack_len = ip_hdr_len;
    char* buffer;
    sockaddr_in addr;
    
    if ((hSocket = WSASocket(AF_INET, SOCK_RAW, IPPROTO_RAW, NULL, 0, WSA_FLAG_OVERLAPPED)) == INVALID_SOCKET) {   //  Вот тут происходит ошибка
        Log(L"error", L"Не удаётся создать сокет");
        return;
    }
    Log(L"info", L"Сокет создан");
 
    if (setsockopt (hSocket, IPPROTO_IP, 3, (char*)&opt, sizeof(opt)) == SOCKET_ERROR) {
        Log(L"error", L"Ошибка установки опций сокета");
    } else {
        Log(L"info", L"Опции сокета установлены");
 
        ip_hdr.ver_ihl = RS_IP_VERSION;
        ip_hdr.tos = 0;
        ip_hdr.tlen = htons(ip_hdr_len);
        ip_hdr.id = 0;
        ip_hdr.flags_fo = 0;
        ip_hdr.ttl = 128;
        ip_hdr.proto = IPPROTO_IP;
        ip_hdr.crc = 0;
        ip_hdr.src_addr = inet_addr("192.168.10.103");
        ip_hdr.dst_addr = inet_addr("192.168.10.1");
        buffer = (char *) calloc (ip_pack_len, sizeof (char));
        memcpy(buffer, &ip_hdr, ip_hdr_len);
        ip_hdr.crc = getCRC((unsigned short *) buffer, ip_pack_len);
        memcpy(buffer, &ip_hdr, ip_hdr_len);
 
 
        if(sendto(hSocket, buffer, ip_pack_len, 0, (struct sockaddr *)&addr, sizeof (addr)) == SOCKET_ERROR) {
            Log(L"error", L"Ошибка при отправке пакета");
        } else {
            Log(L"info", L"Пакет успешно отправлен");
        }
 
        free(buffer);
 
    }
 
    if (closesocket(hSocket) == INVALID_SOCKET) {
        Log(L"error", L"Не удаётся закрыть сокет");
        return;
    }
    Log(L"info", L"Сокет закрыт");
}
CraZZZy-GameRRR вне форума Ответить с цитированием
Старый 03.05.2013, 20:33   #2
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Вам же написали: НЕ ПОДДЕРЖИВАЕТСЯ

Ставьте драйвер, типа винпкап или переходите на 0 уровень.
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 03.05.2013, 21:16   #3
CraZZZy-GameRRR
Пользователь
 
Регистрация: 15.04.2010
Сообщений: 98
По умолчанию

WinPcap у меня стоит.
CraZZZy-GameRRR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
chronoforms для joomla, ошибка при отправке сообщения mirra88 WordPress и другие CMS 1 05.08.2012 20:54
Ошибка при отправке E-Mail POPOV Работа с сетью в Delphi 4 10.04.2012 23:47
Ошибка 200 при отправке данных )Игнат( Работа с сетью в Delphi 2 15.06.2011 19:43
Ошибка при отправке сообщений через SMTPClient BoT_T Работа с сетью в Delphi 6 26.09.2010 17:16
ошибка при отправке D_E_N Работа с сетью в Delphi 11 01.11.2009 00:41