С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
7 / 7 / 3
Регистрация: 23.12.2014
Сообщений: 94
1

RAW сокет

18.04.2015, 13:29. Показов 1441. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
нужен рабочий пример создания сырого сокета
З.ы под windows

Добавлено через 20 минут
нашел такой код, под хрюшей работает збс, но в 7 неработает, как можно это исправить? и можно ли это исправить вообще?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <Winsock2.h>//Ws2_32.lib
#include <ws2tcpip.h>
//#include <Windows.h>
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
/*****************************************************************/
void ShowError()
{
        LPVOID lpMsgBuf = NULL;
        FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,NULL,WSAGetLastError(),
                MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),(LPTSTR)&lpMsgBuf,0,NULL);
        CharToOem((char*)lpMsgBuf,(char*)lpMsgBuf);
        cout<<(LPCTSTR)lpMsgBuf<<endl;
        LocalFree(lpMsgBuf);
}
 
USHORT checksum(USHORT *buffer, int size)
{
    unsigned long cksum=0;
    while (size > 1){
        cksum += *buffer++;
        size  -= sizeof(USHORT);
    }
    if (size){
        cksum += *(UCHAR*)buffer;
    }
    cksum = (cksum >> 16) + (cksum & 0xffff);
    cksum += (cksum >>16);
    return (USHORT)(~cksum);
}
/*****************************************************************/
typedef struct ip_hdr
{
        unsigned char    ip_verlen;
        unsigned char    ip_tos;
        unsigned short   ip_total_len;
        unsigned short   ip_id;
        unsigned short   ip_offset;
        unsigned char    ip_ttl;
        unsigned char    ip_protocol;
        unsigned short   ip_checksum;
        unsigned int     sourceIP;
        unsigned int     destIP;
}IP_HDR;
 
typedef struct udp_hdr
{
        unsigned short   source_port;
        unsigned short   dest_port;
        unsigned short   udp_len;
        unsigned short   udp_sum;
}UDP_HDR;
 
/*****************************************************************/
 
int main()
{
        WSADATA            wsaData;
        struct sockaddr_in remote;
        IP_HDR                 ipHdr;
        UDP_HDR                udpHdr;
        unsigned short     iTotalSize,iIPSize,iUdpSize, iUdpChecksumSize,ver;
        char                       buf[4096],*ptr,szMessage[4068];
        strcpy(szMessage,"Code by Lazy_elf");
 
 
        if(WSAStartup(0x0202,&wsaData)){ShowError();}
        else
        {
                cout<<"WSAStartup - OK"<<endl;
                SOCKET sckt;
                sckt = WSASocket (AF_INET,SOCK_RAW,IPPROTO_UDP,NULL,0,0);
                if(sckt == INVALID_SOCKET){ShowError();}
                {
                        cout<<"Raw scoket is created"<<endl;
 
                        BOOL opt = TRUE;
                        if(setsockopt (sckt,IPPROTO_IP,IP_HDRINCL,(char*)&opt,sizeof(opt))==SOCKET_ERROR)
                        {ShowError();}
                        else
                        {
                                cout<<"setsockopt - OK"<<endl;
                                iTotalSize = sizeof(ipHdr)+sizeof(udpHdr)+strlen(szMessage);
                                iIPSize    = sizeof(ipHdr)/sizeof(unsigned long);
                                ver = 4;
                                ipHdr.ip_verlen    = (ver<<4) | iIPSize;
                                ipHdr.ip_tos       = 0;
                                ipHdr.ip_total_len = htons(iTotalSize);
                                ipHdr.ip_id        = 0;
                                ipHdr.ip_offset    = 0;
                                ipHdr.ip_ttl       = 128;
                                ipHdr.ip_protocol  = IPPROTO_UDP;
                                ipHdr.ip_checksum  = 0;
                                ipHdr.sourceIP     = inet_addr("127.0.0.1");
                                ipHdr.destIP       = inet_addr("127.0.0.1");
                                //-------------------------------------------//
                                iUdpSize = sizeof(udpHdr)+strlen(szMessage);
                                udpHdr.source_port = htons(3004);
                                udpHdr.dest_port   = htons(4004);
                                udpHdr.udp_len     = htons(iUdpSize);
                                udpHdr.udp_sum     = 0;
                                //-------------------------------------------//
                                iUdpChecksumSize = 0;
                                ptr = buf;ZeroMemory(buf,4096);
                                memcpy(ptr,&ipHdr.sourceIP, sizeof(ipHdr.sourceIP));
                                ptr              += sizeof(ipHdr.sourceIP);
                                iUdpChecksumSize += sizeof(ipHdr.sourceIP);
                                memcpy(ptr,&ipHdr.destIP,sizeof(ipHdr.destIP));
                                ptr              += sizeof(ipHdr.destIP);
                                iUdpChecksumSize += sizeof(ipHdr.destIP);
                                ptr++;iUdpChecksumSize += 1;
                            memcpy(ptr,&ipHdr.ip_protocol,sizeof(ipHdr.ip_protocol));
                                ptr              += sizeof(ipHdr.ip_protocol);
                                iUdpChecksumSize += sizeof(ipHdr.ip_protocol);
                                memcpy(ptr,&udpHdr.udp_len,sizeof(udpHdr.udp_len));
                                ptr              += sizeof(udpHdr.udp_len);
                                iUdpChecksumSize += sizeof(udpHdr.udp_len);
                        memcpy(ptr,&udpHdr,sizeof(udpHdr));
                                ptr              += sizeof(udpHdr);
                                iUdpChecksumSize += sizeof(udpHdr);
                                for(unsigned int i = 0; i < strlen(szMessage); i++, ptr++)
                                        *ptr = szMessage[i];
                                iUdpChecksumSize += strlen(szMessage);
                                udpHdr.udp_sum =  checksum((USHORT *)buf, iUdpChecksumSize);
 
                                ZeroMemory(buf,4096);ptr = buf;
 
                                memcpy(ptr,&ipHdr, sizeof(ipHdr)); ptr += sizeof(ipHdr);
                                memcpy(ptr,&udpHdr,sizeof(udpHdr));ptr += sizeof(udpHdr);
                                memcpy(ptr,szMessage,strlen(szMessage));
 
 
                                remote.sin_family      = AF_INET;
                                remote.sin_port        = htons(4004);
                                remote.sin_addr.s_addr = inet_addr("127.0.0.1");
                                if(sendto(sckt,buf,iTotalSize,0,(SOCKADDR *)&remote,sizeof(remote))==SOCKET_ERROR){ShowError();}
                                else{cout<<"sendto - OK"<<endl;}
                        }
 
                        if(closesocket(sckt)== SOCKET_ERROR){ShowError();}
                        else{cout<<"closesocket - OK"<<endl;}
                }
 
                if(WSACleanup()){ShowError();}
                else{cout<<"WSACleanup - OK"<<endl;}
        }
        system("pause");
        return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.04.2015, 13:29
Ответы с готовыми решениями:

Преобразование Raw-данных в AIFF
Пытаюсь считать Raw дату, и сформировать из него AIFF файл с заголовком и датой. Тоже самое делал с...

Конвертация *.RAW файлов в *.tiff с камеры GitUP G3
Всем привет. Возникла такая проблема. Требуется конвертация *.RAW файлов c камеры GitUp G3....

Неблокирующий сокет
Добрый день. Фишка в создание связи клиенты-сервер, где сервер работает в однопоточном режиме. ...

Raw socket подмена ip адреса отправителя
Задача такая надо отправить пакет с другим ip адресом отправителя. Подскажите как это сделать?...

4
15 / 15 / 7
Регистрация: 27.10.2012
Сообщений: 112
21.04.2015, 23:55 2
Ты бы хотя бы ошибки написал. Без этого тебе никто не скажет точно.
Хотя наверняка что-то с либами не так
0
7 / 7 / 3
Регистрация: 23.12.2014
Сообщений: 94
22.04.2015, 16:51  [ТС] 3
san92der, ошибок как таковых нет, это связано с тем что поддержка в виндовс 7 сырых сокетов сильно урезана, они просто не создаются
0
15 / 15 / 7
Регистрация: 27.10.2012
Сообщений: 112
22.04.2015, 18:43 4
Раз уж никто не отвечает, кроме меня, позволю себе написать то, в чем не особо уверен
В универе писал простейший пример клиента-сервера на сырых сокетах.
На семерке у себя все запускал и работало. Была только пара косяков с запуском примеров
на семерке и у меня и у одногруппников. В основном все решалось этой строкой:
C++
1
#pragma comment(lib, "ws2_32.lib");
Либа кажется эта, если память не изменяет. Но без dll-ок ничего не получалось.
1
7 / 7 / 3
Регистрация: 23.12.2014
Сообщений: 94
24.04.2015, 11:46  [ТС] 5
san92der, и на этом спасибо
0
24.04.2015, 11:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.04.2015, 11:46
Помогаю со студенческими работами здесь

Визуализация 16 битного raw файла: Нужен совет
Всем привет! Нужен совет, кто как решал бы такую задачу: На входе есть монохромное...

Авторизация, игра pw. Нужно получить Raw Stream
Использую Синапс. Если снифать автаризацию то передается параметр xml version = &quot;1.0&quot;...

сокет в builder
Здравствуйте! Влот учусь прогать на с++, наткнулся на готовый код в билдере...

Вопрос про сокет
Здравствуйте, есть консольное приложение которое с помощь сокетов грузит картинку из интернета....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru