Форум: "Сети";
Текущий архив: 2008.03.02;
Скачать: [xml.tar.bz2];
ВнизОтправка RAW пакета Найти похожие ветки
← →
Сергей Колесник (2007-06-09 09:38) [0]Как в рекламе говорят, всё что мне сейчас нужно это отправить 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;
← →
Сергей М. © (2007-06-09 10:01) [1]Как думаешь, чему будет равно выражение sizeof(a) ?
← →
Сергей Колесник (2007-06-09 10:11) [2]я проверял при отладке через переменную, размер правильный ... но пакет в сеть не уходит, правда не догадался посмотреть, ошибки :( ... ща гляну
← →
Сергей Колесник (2007-06-09 10:14) [3]вот она:
WSAENOTCONN
← →
Сергей М. © (2007-06-09 10:24) [4]
> размер правильный
А, ну да, у тебя открытый массив.
И ?
← →
Сергей М. © (2007-06-09 10:35) [5]Вообще-то для connectionless-протоколов предназначена ф-ция sendto(), а не send()
← →
Сергей М. © (2007-06-09 10:38) [6]И к тому же если это "вырезанный из сниффера рабочий удипи пакет", то почему же ты при создании гнезда указываешь IPPROTO_RAW, а не IPPROTO_IP ?
← →
Сергей Колесник (2007-06-09 10:53) [7]с этой ошибкой понятно, просто нужно было либо юзать connetc либо sendto
он теперь возник другой вопрос, исчезла информация о портах, исказилось поле данных ... короче на выходе пакет имеет осмысленные значения только до поля айпи адреса назначения
← →
Сергей Колесник (2007-06-09 10:54) [8]упс ... не видел ответа, щас попробуем с ipproto_udp
← →
Сергей Колесник (2007-06-09 11:35) [9]Только сейчас дошло, что сокет при отправке генерирует свой собственный заголовок пакета, а мою "дату" фигачит в качестве поля значений. А я то наивный понадеялся что смогу таким образом отправить в сеть пакет со своим собственным заголовком ...
А может всётаки это осуществимо?
← →
Сергей Колесник (2007-06-09 11:37) [10]ну а если ещё конкретней, то мне надо чтобы в качестве порта источника в заголовке пакета был указан уже открытый и использующийся в системе порт, на который я ессно не могу забиндить сокет.
← →
Сергей М. © (2007-06-09 11:39) [11]
> А может всётаки это осуществимо?
см. setsockopt(Ыщсл, IPPROTO_IP, IP_HDRINCL, ..)
← →
Сергей Колесник (2007-06-09 12:00) [12]посмотрел хелпу моей Д6 и юнит винсока - нет там таких констант :(
← →
Сергей М. © (2007-06-09 12:12) [13]смотри в MSDN - там все есть
← →
Сергей Колесник (2007-06-09 12:56) [14]там тоже нет таких параметров этой функции
смотрел здесь: http://msdn2.microsoft.com/en-us/library/ms740476.aspx
← →
Сергей М. © (2007-06-09 13:05) [15]
> там тоже нет таких параметров этой функции
Есть.
http://msdn2.microsoft.com/en-us/library/ms738586.aspx
← →
Сергей М. © (2007-06-09 13:07) [16]Константа эта равна десятичной двойке.
← →
Сергей Колесник (2007-06-09 13:46) [17]нашел :)
спасибо ... буим изучать
← →
NeyroSpace © (2007-06-12 15:25) [18]Во-первых IPPROTO_RAW полностью поддерживает только WIN2K и выше.
Во-вторых нужно понимать как инкапсулируются данные в пакетах.
Если работаешь в IPPROTO_RAW, то ни о каком порте тут речи нет. Ты спускаешься на уровень ниже. Твои данные сразу внутри протокола IP, дальше идет заголовок протоколов транспортного уровня например TCP, UDP, ICMP и ты их должен САМ правильно заполнить, в том числе, расчитать контрольную сумму, если она есть и т.д.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2008.03.02;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.042 c