Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/40: Рейтинг темы: голосов - 40, средняя оценка - 4.68
 Аватар для SkySurfer
8 / 8 / 3
Регистрация: 06.10.2010
Сообщений: 36

raw socket

21.03.2011, 23:42. Показов 8625. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер,
надо написать генератор tcp пакетов, возник вопрос:
на msdn написано что если в при создании сокета выбрать SocketType.Raw то надо прописать ip заголовок самому("Your application must provide a complete IP header when sending."), но затем я наткнулся на функцию SetSocketOption, в которой, в частности, можно выставить свойство сокета HeaderIncluded = false,то есть не предоставлять ip заголовка("If the IP_HDRINCL socket option is set to true for an IPv4 socket (address family of AF_INET), the application must supply the IPv4 header in the outgoing data for send operations. If this socket option is false (the default setting), then the IPv4 header should not be in included the outgoing data for send operations."). Таким образом, если выбрать тип сокета Raw и HeaderIncluded=false то ip заголовок будет заполнен автоматически?

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

Заранее спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.03.2011, 23:42
Ответы с готовыми решениями:

Raw сокеты и icmp
Привет! Помогите, пожалуйста. Есть raw сокет, который должен перехватывать все входящие icmp сообщения icmpSocket = new...

Работа с GET-POST через Raw
Возможно ли работать с запросами путем прописывания заголовков как оно есть в фидлере? И если да, то какие минусы данного метода. GET...

Как распарсить RAW файл (не картинка)?
Доброе время суток. Имеется .RAW файл (не картинка), который выдаёт устройство. Как его можно распарсить на C# ?

3
145 / 145 / 26
Регистрация: 09.10.2009
Сообщений: 261
22.03.2011, 17:25
Во вложении пример клиент-сервера обмена сообщениями на сокетах. Пример очень сырой, но рабочий. Когда-то использовал его куски для написания чата. По-моему, тут даже есть перенаправление между клиентами. В общем, изучайте. Думаю, пригодится.
П.С. Проекты на VS 2010.
Вложения
Тип файла: rar Sockets.rar (25.3 Кб, 329 просмотров)
1
 Аватар для SkySurfer
8 / 8 / 3
Регистрация: 06.10.2010
Сообщений: 36
22.03.2011, 23:17  [ТС]
Цитата Сообщение от ArtOfLife Посмотреть сообщение
Во вложении пример клиент-сервера обмена сообщениями на сокетах. Пример очень сырой, но рабочий. Когда-то использовал его куски для написания чата. По-моему, тут даже есть перенаправление между клиентами. В общем, изучайте. Думаю, пригодится.
П.С. Проекты на VS 2010.
Спасибо, но в вашем примере не сырые сокеты...
0
145 / 145 / 26
Регистрация: 09.10.2009
Сообщений: 261
23.03.2011, 00:11
Список проблем при работе с сырыми сокетами:
Q: Raw sockets - Why do my machine send an RST packet in reply to a SYN/ACK packet?

A: This is one of the most frequently asked question by someone who is experimenting with raw sockets and TCP/IP. It is known that the 'IP_HDRINCL' socket option allows you to include the IP header along with the data. Since TCP encapsulates the IP header, we can also build a TCP packet and send it over a network. But the problem is, a TCP connection can never be established this way. The scenario is as follows:

A TCP connection is always made by a three-way handshake. So, initially you send a 'SYN' packet to the remote machine. If it is actively listening on the port, you get a 'SYN/ACK' packet. So far so good. But before you can respond, your machine sends an 'ACK/RST' packet and connection attempt is ended. For the connection to be complete, instead of the 'RST' packet, your machine should be sending an 'ACK' to the remote machine.

The difference lies where the connection is exactly made. Although the programs are communicating after the connection is complete, the TCP connection is never between two programs but rather between the TCP stacks of the two machines. Here 'stack' means a layer of programs that communicates between each other. TCP stack stands for the protocol driver or the actual network transport protocol. Now lets look at exactly what happens when you send a 'SYN' packet...

Since you are using raw sockets ('SOCK_RAW') and not TCP/Stream sockets ('SOCK_STREAM') the TCP stack has no information about what you are doing at program level. And since the 'IP_HDRINCL' allows you to build any type of IP packet and send it along with the data, you can build a 'SYN' packet and send it to the TCP server program which is actively listening. But the point is that the 'SYN' packet is being sent from your program and not the stack. In other words the TCP stack of your machine has no idea how of sending the 'SYN' packet.

On the other side the 'SYN' packet is received by the stack at the remote machine and not exactly by the program. As with the case of the arrival of any 'SYN' packet, the stack at the remote machine responds with a 'SYN/ACK' packet. This packet is now received by the TCP stack of your machine. In other words, the incoming TCP packet ('SYN/ACK') will be processed by the stack. Since it has no information of the previous sent 'SYN' packet, it responds with a 'RST' packet, as in the case of any improper or unacceptable packet for a connection.

So the difference between sending and receiving a TCP packet using raw sockets is, the former is not processed while the latter is processed by the TCP stack of your machine.
в Windows XP SP2 и выше есть Spoof Detection, который не выключается, а выключается он кажется только на серверных продуктах мелкомягких. Поэтому использование SOCK_RAW в XP безсмысленно. Или ставь себе Windows 2000 или пиши всякую муть под WinPCAP, на него Spoof Detection в ОС Windows XP не распространяется
Только есть небольшея проблемка: когда мы работает с реального IP (то есть в винде он прописан), отсылаем SYN и нам приходит SYNACK, винда не ждет этого SYNACK и поэтому сама отсылает RST, таким образом завершая наше соединение.
Это не есть гуд, поэтому приходится юзать какой-то другой IP (другого способа (файервола нет) я не придумал), тогда что бы не приходило на этот IP, винда на этот пакет просто забьет (но нам передаст).
А чтобы что-то приходило, пришлось написать еще и ARP-server (там же папочка VHost). Ему нужен WinPCap.
Да, MAC адрес надо прописывать настоящий, а то винда опять же забьет на пакет (и нам не передаст, он вообще до модуля TCP/IP не дойдет).
К последней цитате прилагался проект на плюсах (поместил в приложение). Возможно поможет вникнуть в концепцию. Но, судя по выше написанному, использование сырых сокетов в большинстве случаях просто невозможно. Приходится извращаться, как в последнем примере.
Вложения
Тип файла: rar TCP.rar (12.7 Кб, 242 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.03.2011, 00:11
Помогаю со студенческими работами здесь

Html.Raw и строки
Есть код такого вида <textarea >@Html.Raw("<b>hello</b>")</textarea> Он выдает исключение System.NullReferenceException: Ссылка на...

Socket перенаправить в другой Socket
Доброго всем. Что делаю: Принимаю запрос, который нужно перенаправить к удаленному компьютеру. Получается прокси, который...

Post запрос через raw
Всем привет! Отправляю данные get запросом, но необходимо немного переделать программу под Post и возникла проблема с отправкой Post...

RAW Socket, заголовки и тд
Всех приветствую. Если в функции socket( int AF, int Type, int Protocol ) во второй аргумент пихаем SOCK_RAW, то это подразумевает...

Socket Raw Promiscuous mode
Здравствуйте! Решил сделать небольшую программу для подсчета трафика между своими товарищами по работе. Все бы ничего, но если я...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru