![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отправка RAW пакета [D6, WinXP]
Сергей Колесник © (2007-06-09 09:38:00)Как в рекламе говорят, всё что мне сейчас нужно это отправить RAW пакет, но мой ламерский код не работает, если не трудно направьте на путь истинный :)
procedure lsend(a: array of byte);
begin
send(sock,a,sizeof(a),0);
end;
WSAStartup($202,init);
Sock:=Socket(PF_INET,SOCK_RAW,IPPROTO_RAW);
lsend([0,0,0,0,0,0,0,0,0,0,0,0,11,6,0,0,0,0,0,0,176,0,0,0,0,0,0,0,171,216,182,132,85, 170,199,1,234,5,0,0,58,0,0,0,58,0,0,0,255,255,255,255,255,255,0,21,242,238,50,16 8,8,0,69,0,0,44,121,104,0,0,128,17,169,50,10,8,14,31,255,255,255,255,23,224,23,2 24,0,24,23,248,247,47,16,0,80,88,51,87,21,0,0,0,0,0,0,0]);
// это вырезанный из сниффера рабочий удипи пакет
WSACleanup;
NeyroSpace (2007-06-12 15:25:00) [1]Во-первых IPPROTO_RAW полностью поддерживает только WIN2K и выше.
Во-вторых нужно понимать как инкапсулируются данные в пакетах.
Если работаешь в IPPROTO_RAW, то ни о каком порте тут речи нет. Ты спускаешься на уровень ниже. Твои данные сразу внутри протокола IP, дальше идет заголовок протоколов транспортного уровня например TCP, UDP, ICMP и ты их должен САМ правильно заполнить, в том числе, расчитать контрольную сумму, если она есть и т.д.
Сергей Колесник (2007-06-09 13:46:00) [2]нашел :)
спасибо ... буим изучать
Сергей М. (2007-06-09 13:07:00) [3]Константа эта равна десятичной двойке.
Сергей М. (2007-06-09 13:05:00) [4]
> там тоже нет таких параметров этой функции
Есть.
http://msdn2.microsoft.com/en-us/library/ms738586.aspx
Сергей Колесник (2007-06-09 12:56:00) [5]там тоже нет таких параметров этой функции
смотрел здесь: http://msdn2.microsoft.com/en-us/library/ms740476.aspx
Сергей М. (2007-06-09 12:12:00) [6]смотри в MSDN - там все есть
Сергей Колесник (2007-06-09 12:00:00) [7]посмотрел хелпу моей Д6 и юнит винсока - нет там таких констант :(
Сергей М. (2007-06-09 11:39:00) [8]
> А может всётаки это осуществимо?
см. setsockopt(Ыщсл, IPPROTO_IP, IP_HDRINCL, ..)
Сергей Колесник (2007-06-09 11:37:00) [9]ну а если ещё конкретней, то мне надо чтобы в качестве порта источника в заголовке пакета был указан уже открытый и использующийся в системе порт, на который я ессно не могу забиндить сокет.
Сергей Колесник (2007-06-09 11:35:00) [10]Только сейчас дошло, что сокет при отправке генерирует свой собственный заголовок пакета, а мою "дату" фигачит в качестве поля значений. А я то наивный понадеялся что смогу таким образом отправить в сеть пакет со своим собственным заголовком ...
А может всётаки это осуществимо?
Сергей Колесник (2007-06-09 10:54:00) [11]упс ... не видел ответа, щас попробуем с ipproto_udp
Сергей Колесник (2007-06-09 10:53:00) [12]с этой ошибкой понятно, просто нужно было либо юзать connetc либо sendto
он теперь возник другой вопрос, исчезла информация о портах, исказилось поле данных ... короче на выходе пакет имеет осмысленные значения только до поля айпи адреса назначения
Сергей М. (2007-06-09 10:38:00) [13]И к тому же если это "вырезанный из сниффера рабочий удипипакет", то почему же ты при создании гнезда указываешь IPPROTO_RAW, а не IPPROTO_IP ?
Сергей М. (2007-06-09 10:35:00) [14]Вообще-то для connectionless-протоколов предназначена ф-ция sendto(), а не send()
Сергей М. (2007-06-09 10:24:00) [15]
> размер правильный
А, ну да, у тебя открытый массив.
И ?
Сергей Колесник (2007-06-09 10:14:00) [16]вот она:
WSAENOTCONN
Сергей Колесник (2007-06-09 10:11:00) [17]я проверял при отладке через переменную, размер правильный ... но пакет в сеть не уходит, правда не догадался посмотреть, ошибки :( ... ща гляну
Сергей М. (2007-06-09 10:01:00) [18]Как думаешь, чему будет равно выражение sizeof(a) ?