Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2014.03.16;
Скачать: [xml.tar.bz2];

Вниз

Raw socket   Найти похожие ветки 

 
NoRTeN   (2010-04-13 23:52) [0]

Здравствуйте господа. Стоит задача сформировать ICMP пакет сомостоятельно, тоесть заполнить заголовок IP и ICMP вручную.
Составление заголовка проблем не вызывает, проблема возникает при его отправке. Когда я пытаюсь отправить свой пакет к ниму приписывается еще один IP заголовок. А мой пакет помещается в поле данных пакета созданного программой. Сле кто сталкивался с этой проблемой подскажите пожалуйста как правельно создать и настроить сокет(я подозреваю дело именно в этом) чтобы можно было отправлять пакет как есть, без добавления дополнительных заголовков. Зарание спасибо. Есле это играет роль, то пишу на Delphi 2009


 
brother ©   (2010-04-14 05:19) [1]

код где, как ты его заплоняешь?


 
NoRTeN   (2010-04-14 09:07) [2]

Я заполняю так:
//ICMP пакета
ICMPhead = record
   icmp_type: byte;        //Тип
   icmp_code: byte ;       //Код
   icmp_chksum: word;      //Контрольная сумма
   icmp_id: word;          //Id
   icmp_seq: word;         //Порядок пакета
   icmp_data: array [0..10] of byte; // можно больше а можно и меньше
end;

//IP пакет
//IP Header
T_IP_Header = record
   ip_verlen_IHL   : Byte;       //Версия протокола  и длина заголовка
   ip_tos          : Byte;       //Тип сервиса
   ip_totallength  : word;       //Общая длина пакета
//32 бита
   ip_id           : Word;       //Идентификатор пакета
   ip_offset_Smeh  : Word;       //флаги смещение
//32 бита
   ip_ttl          : Byte;       //Время жизни пакета
   ip_protocol     : Byte;       //Протокол верхнего уровн
   ip_checksum     : Word;       //Контрольная сумма
//32 бита
   ip_srcaddr      : array [0..3]of byte;  //IP- адрес отправителя
//32 бита
   ip_destaddr     : array [0..3]of byte;//IP- адрес получателя
//1001 байт
   ip_ICMP         : ICMPhead//IP Данные
 end;
Заполняю поля все поля вручную, из эдитов, после заполнения пакет выглядит так:
IP
69 0 30 12 12 0 128 1 41103 (192 168 0 6) (192 168 0 6)  
ICMP
8 0 65403 1 123
Это значение полей соответсвующих структур, в скобках указанна поэлементная запись массови, отвечающего за одно поле структуры.

Теперь проблемное место, создание сокета и отправление. Тут я совсем не уверен.

var
FSocket:TSocket;
Data:WSAdata;
op,nTimeOver,CheckS,RB,ConRet,pid:word;
TCPIP: array [0..100] of byte;
ChecksumSize,TcpHeaderLen,CheckSum:word;
Adrr:SockAddr_in;
Packet,PacketICMP: array [0..60] of byte;

buf:array [0..60] of byte;
Znach:byte;
str:string;
 I: Integer;
 arg:integer;
begin
// Создание и настройка сокета
WSAStartup($0202,Data);
FSocket:= Socket(AF_INET, SOCK_RAW, IPPROTO_IP);

//WSASocket(AF_INET ,SOCK_RAW,IPPROTO_IP,nil,0,SECURITY_PROTOCOL_NONE);
//op:=1;
//setsockopt(FSocket,IPPROTO_IP,SO_OOBINLINE,@op,sizeof(op));
//nTimeOver:=10000;
//setsockopt(FSocket,SOL_SOCKET,SO_BROADCAST,@nTimeOver,sizeof(nTimeOver));
//SetSockOpt(FSocket, IPPROTO_IP, IP_HDRINCL, @Op, SizeOf(Op));
Adrr.sin_family:=AF_INET;
Adrr.sin_addr.S_addr:=inet_addr("192.168.217.128");
ConRet:=connect(FSocket, Adrr, sizeof(Adrr));
//Заполнение IP заголовка
......
if (send(FSocket,IPp,Sizeof(IPp),0)=SOCKET_ERROR)
       then
         listbox1.Items.Add("Send  error")
       else
         listbox1.Items.Add("Send ok");
я немного поразному создавать и настраивать сокет , в коментариях второй варинт настройки. Особые сомнения у меня вызывает функция конект, нужнали она? есле нет то как без нее использовать send.


 
Сергей М. ©   (2010-04-14 09:43) [3]

const
  IPPROTO_RAW    = 255;
...
FSocket:= Socket(AF_INET, SOCK_RAW, IPPROTO_RAW);


 
NoRTeN   (2010-04-14 16:38) [4]

Не помогло, тот же результат


 
Сергей М. ©   (2010-04-14 16:50) [5]

Та быть того не могёт)

У индейцев в IdICMPClient "тот", а у тебя "не тот" ?


 
NoRTeN   (2010-04-14 16:57) [6]

Вот выкладывыю перехваченый с пылу-жару пакет.

45 00 00 50 0C B9 00 00 80 FF F8 A3 C0 A8 D9 80
C0 A8 D9 80 {45 00 1E 00 0C 00 00 00 80 01 8F A0
C0 A8 00 06 C0 A8 00 06 08 00 7B FF 01 00 7B 00  
00 00 00 00 00 00 00 00 00 00 00 00 08 00 7B FF}  

Фигурными скобками я выделел куда помещается мой пакет, тоесть какраз первые 20 байт были привинчены.
Делал так
FSocket:= Socket(AF_INET, SOCK_RAW, IPPROTO_RAW );


 
Сергей М. ©   (2010-04-14 17:20) [7]


> //SetSockOpt(FSocket, IPPROTO_IP, IP_HDRINCL, @Op, SizeOf(Op));


Зачем закомментарил ?
Ведь этой строчкой ты как раз и указываешь, что в случае с IPPROTO_IP IP-заголовок ты формируешь сам и ТCP/IP-стек при этом не обязан заботиться о его формировании


 
NoRTeN   (2010-04-14 17:37) [8]

Я пробовол поразному, никакой варинт не подошол. Строчку оставил, чтобы показать те методы которые опробовал.


 
Сергей М. ©   (2010-04-14 17:48) [9]

Странно это ..

Ну а сто мешает оттрассировать пошагово соотв.код в составе того же IdICMPClient с целью выяснения правильной последовательности с правильными же параметрами вызовов WinsockAPI ?


 
NoRTeN   (2010-04-14 17:59) [10]

Пробовал, но не нашол где заполняеться IP заголовок, помоему в этом компаненьте он также заполняется автоматически.


 
NoRTeN   (2010-04-18 20:33) [11]

Неужели нет никого кто сталкивался с падобной проблемой?



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2014.03.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.002 c
6-1271188328
NoRTeN
2010-04-13 23:52
2014.03.16
Raw socket


15-1380117316
JohnKorsh
2013-09-25 17:55
2014.03.16
Порты COM по BlueTooth


15-1380313803
Юрий
2013-09-28 00:30
2014.03.16
С днем рождения ! 28 сентября 2013 суббота


2-1369321524
shadow_hawk
2013-05-23 19:05
2014.03.16
DevExpress cxGrid


15-1380038174
Игорь Шевченко
2013-09-24 19:56
2014.03.16
Рома aka Kerk, поздравляю со званием!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский