Форум: "Сети";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];
ВнизРаспаковка пакетов. Найти похожие ветки
← →
-=Demon=- (2004-04-29 14:20) [0]Ранее в приводимом здесь коде снифера бы ло рассмотрен тоько перехват. Но не подскажите мастера как распаковывать пришедшие данные я их распаковываю следующим образом
procedure WWW.FIcmp;
var
Tip,cod:integer;
Icmpheader:Picmp;
begin
Icmpheader:= PICMP(integer(@Buffer[IPHdrLen*4]));
sCod:=inttostr(Icmpheader.icmp_type);
sTip:=inttostr(Icmpheader.icmp_code);
SICMPID:=inttostr(Icmpheader.icmp_id);
snomer:=inttostr(Icmpheader.icmp_seq);
end;
procedure WWW.FTCP;
Var
SrcPortt,DstPortt:integer;
begin
SrcPortt:=TCPHeader((@Buffer[IPHdrLen*4])^).SrcPort;
SSrcPort :=Inttostr((SrcPortt AND $00FF shl 8) OR (SrcPortt AND $FF00 shr 8));
DstPortt:=TCPHeader((@Buffer[IPHdrLen*4])^).DstPort;
SDstPort :=Inttostr((DstPortt AND $00FF shl 8) OR (DstPortt AND $FF00 shr 8));
end;
procedure WWW.FUDP;
Var
SrcPortt,DstPortt:integer;
begin
SrcPortt:=TCPHeader((@Buffer[IPHdrLen*4])^).SrcPort;
SSrcPort :=Inttostr((SrcPortt AND $00FF shl 8) OR (SrcPortt AND $FF00 shr 8));
DstPortt:=TCPHeader((@Buffer[IPHdrLen*4])^).DstPort;
SDstPort :=Inttostr((DstPortt AND $00FF shl 8) OR (DstPortt AND $FF00 shr 8));
end;
.............
res:=recv(Sock, Buffer, SizeOf(Buffer), 0);
if res >= SizeOf(IPHeader) then
begin
Version:=inttostr((IPHeader((@Buffer)^).VerLen AND $F0) shr 4);
IPHdrLen :=IPHeader((@Buffer)^).VerLen AND $0F;
StTl:=Inttostr(IPHeader((@Buffer)^).TTL);
SIPHdrLen:=Inttostr(Res);
//Synchronize(Message7);
//Synchronize(Message9);
if IPHdrLen >= 5 then
begin
{----------------------------}
SrcIP :=IPHeader((@Buffer)^).IPSrc;
SIpSrt:=inet_ntoa(TInAddr(SrcIP));
//Synchronize(Message5);
DstIP :=IPHeader((@Buffer)^).IPDst;
SIpDst:=inet_ntoa(TInAddr(DstIP));
//Synchronize(Message6);
{Ïðîòîêîëû}
case IPHeader((@Buffer)^).Proto of
IPPROTO_ICMP: begin Protokol:="ICMP"; ICMP; end;
IPPROTO_TCP: begin Protokol:="TCP"; FTCP; end;
IPPROTO_UDP: begin Protokol:="UDP"; FUDP; end;
end;
Но а как дальше вытащить информацию. К примеру HTML код.
Заранее благодарен.
← →
Piter © (2004-04-29 18:53) [1]Читай описания форматов, HTTP, FTP ну и т.д.
Очень хороший снифер Ethereal - знает туеву хучу форматов
← →
-=Demon=- (2004-04-30 01:06) [2]Мне не нужны форматы HTTP, FTP. Меня интересует как мне дальше достать информацию?
← →
Digitman © (2004-04-30 08:11) [3]
> -=Demon=-
> как дальше вытащить информацию. К примеру HTML код.
> Мне не нужны форматы HTTP
для тех кто на бронепоезде - для передачи HTML-данных (гипертекст) используется HTTP-протокол (протокол передачи гипертекста)
в свою очередь, HTTP-протокол (протоко прикладного уровеня) использует TCP/IP-протокол (протокол транспортного уровеня)
данные в формате IPPROTO_TCP ты уже научился "нюхать", дело за малым - сходить на http://book.itep.ru и проштудировать все касаемое упомянутых протоколов, прежде чем делать дальнейшие телодвижения
← →
-=Demon=- (2004-04-30 10:48) [4]Не ну блин умников развелось. Я прошу объяснить мне как из переменной Buffer вытащить информацию (данные), которые идут после tcp заголовка.
← →
Digitman © (2004-04-30 11:31) [5]http://book.itep.ru/4/44/tcp_443.htm - здесь описание данных в формате TCP в принятом тобой буфере
← →
-=Demon=- (2004-04-30 15:38) [6]Если не сложно. Можно в показать прогаммно.
На сколько я знаю один из способов получения информации это добавления поля Data в структуру TCPHEADER
TTCPHeader = packed record
SrcPort: word; //Source Port
DstPort: word; //Destination Port
Seq: Dword; // порядковый номер передаваемого октета
Ack: Dword; // порядковый номер принятого октета
Rsvd0_Off: byte; //Смещение до начала данных
Flags_Rsvd: byte; //флаги
Window: word; // Размер окна
Checksum: word;
UrgPoint: word;
Hren: Dword;
Data: Array [1..1024] of byte;
Но правельно ли это сделано и если правельно то как преобразовать эти данные в текст.
Заранее благодарен.
← →
Digitman © (2004-04-30 16:26) [7]
> как преобразовать эти данные в текст
никак.
TCP-данные не обязаны иметь отображаемый текстовый формат
ЛИБО ЯВНО заостряй внимание на том, чтио речь ты ведешь искл-но о HTML
← →
Verg © (2004-04-30 17:25) [8]
>
> TTCPHeader = packed record
> SrcPort: word; //Source Port
> DstPort: word; //Destination Port
> Seq: Dword; // порядковый номер передаваемого
> октета
> Ack: Dword; // порядковый номер принятого
> октета
> Rsvd0_Off: byte; //Смещение до начала данных
> Flags_Rsvd: byte; //флаги
> Window: word; // Размер окна
> Checksum: word;
> UrgPoint: word;
> Hren: Dword;
> Data: Array [1..1024] of byte;
Откуда ты взял это ?!
Какой "Hren", какая "Data"?
"//Смещение до начала данных" - А вот это вот написано по-русски!
Ты смещения не умеешь добавлять? Или что? Т.е. числа не можешь сложить? К указателью на начало TCP заголовка надо добавить "Смещение до начала данных" и получится адрес начала данных в пакете. Все! И все остальное до конца пакета - это данные этого пакета.
Куда еще проще?!
← →
Verg © (2004-04-30 17:28) [9]
Data Offset (смещение данных) 4 бита
Количество 32-битных слов в TCP заголовке. Указывает на начало по-
ля данных.
(C) RFC 793
← →
-=Demon=- (2004-04-30 18:45) [10]А если можно для тех кто в танке. Кусок кода. Я что то не догнал?
← →
-=Demon=- (2004-05-01 10:54) [11]Попробую перефразировать свой вопрос.
Необходимо все что приходит в данных ТСР пакета представлять в текстовом формате
> Какой "Hren", какая "Data"?
По поводу "Какой Hren" это да, это зря, но "какая Data" мне кажется это вы зря. Потому как я попробовал следующий способ:
Var
Sdata:String;
TCP:PTCPHeader;
.......
for i:=1 to 10000 do Sdata:=sData+Chr(Tcp.Data[i]);
И у меня не много получилось. Но иногда приходит такой бред что просто .....
В чем проблема понять не могу.
Если есть другой способ с радостью рассмотрю..
← →
Verg © (2004-05-01 13:54) [12]Ну хорошо, давай так: возмем процедуру из того исходника, который я недавно тут приводил:
function TCPInput(Iph: PIPHeader; TCPPacket : PTCPHeader; Size : word): boolean;
var TCPData : pchar;
TCPHeaderLen,
TCPDataSize : DWORD;
begin
Result := false;
if Size < sizeof(TTCPHeader) then exit;
if DstPort<>0 then
if TCPPacket^.Source <> DstPort then exit; //Только нужный порт
//SOCK_RAW гарантирует, что IP заголовок имеет правильную КС,
// но на все остальные уровни он плевал, поэтому придется расчитать
// КС TCP пакета самим
{$IFDEF CHECKSUMM}
if net_chksum_add(PHCheckSumm(Iph^.src, Iph^.dst, IPPROTO_TCP, Size),
net_checksum(TCPPacket^, Size)
) <> $FFFF then
exit;
{$ENDIF}
// Начало "распаковки" пакета :)))))
TCPHeaderLen := (TCPPacket^.Rsvd0_Off and $F0) shr 2;
TCPData := pchar(TCPPacket) + TCPHeaderLen;
TCPDataSize := ntohs(Iph^.length) - ( pchar(TCPData) - pchar(Iph) );
// Конец "распаковки" пакета
// Ну и все TCPData Указывает на начало данных пакета
// TCPDataSize содержит их размер
Inc(Trafic0, ntohs(Iph^.length));
Result := true;
end;
:= - это знак присваивания
+ - знак сложения двух величин
- - знак вычитания
Да, дальше не забудь отслеживать соединения, руководствуясь TCP флагами, портами и адресами, делать сборку нескольких TCP пакетов в единый поток, руководствуясь Seq и длиной данных, показаниями UrgentPointer и т.д.
Все, дальше ты уж как-нибудь сама, ок?
← →
-=Demon=- (2004-05-02 13:41) [13]Все, надеюсь последний вопрос.
Я прописал все как ты сказал, но когда идет HTML-код все нормаль выводиться (хотя есть кое каке глюки, но об этом позже). Но когда я к примеру запускаю WinComander и начинаю лазить по сети он мне ничего не выдает хотя должен...
Я сделал все следуующим образом:
type
TTCPHeader = packed record
SrcPort: word;
DstPort: word;
Seq: Dword;
Ack: Dword;
Rsvd0_Off: byte;
Flags_Rsvd: byte;
Window: word;
Checksum: word;
UrgPoint: word;
end;
PTCPHeader = ^TTCPHeader;
VAr
TCP:PTCPHeader;
TCPHeaderLen,TCPDataSize:DWord;
TCPData : pchar;
Sdata:String;
TCPHeaderLen := (TCP^.Rsvd0_Off and $F0) shr 2;
TCPData := pchar(TCP) +TCPHeaderLen;
Sdata:=TCPData;
А когда идет HTML-код то иногда выводиться не полностьютехт, начало съедается.
Что делать и как с этим бороться?
← →
-=Demon=- (2004-05-02 13:46) [14]Да и ещё. А зачем нужно и что она делат эта строчка
TCPHeaderLen := (TCP^.Rsvd0_Off and $F0) shr 2;
← →
Verg © (2004-05-02 13:54) [15]
> Sdata:=TCPData;
Пардон, фигня, опять же :)
У тебя есть указатель "на" и длина этого, на чего "на", так что единственным уместным тут будет применение только SetString, а не присваивания, т.к. никто по сути совей не может гарантировать, что тот блок данных окончится нулем (#0).
> когда идет HTML-код то иногда выводиться не полностьютехт,
> начало съедается
Куда "не выводится", то вооще об чем, о каком таком "выводе"?
Выводе чего и куда? Я ж тебе три недели назад сказал - читай RFC!
Ты как сборку пакетов в поток-то собираешься осуществлять? Как ты привязываешь поток данных к конкретному соединению?
это же целая "кухня", это не пять строк кода.
Я не понимаю, человек начинает по-сути первые шаги в программировании вообще, но почему-то сразу лезет в "крутые катокомбы низкоуровневого сетевого программинга".
Зачем тебе это?!
← →
-=Demon=- (2004-05-02 14:37) [16]Ладно признаюсь.
Demon=Rezya
И как я уже давно сказал с основами всего сетевого программирования я разобрался уже давно.
Просто сейчас начальник мой поставил перд мной 3 задачи
1: Дампить на винт все что приходит и выходит с копьютера.
2: Сделать полную сборку Всех TCP цепочек и сохранить их на винт.
3: Сделать одноконнектовый прокси с возможностью проксирования всех протоколов Прикладного уровня. И с возможностью Заменой IP адреса отправителя. (Грубо говоря с возможностью спуфинга).
Да и Verg ну что я надеюсь мы оставим наши междуусобтци в прошлом и будем сотрудничать :-))))
> Куда "не выводится", то вооще об чем, о каком таком "выводе"?
Забыл виноват, В Мемо посредствам Form1.Memo1.Lines.Add(Sdata);
← →
-=Rezya=- (2004-05-02 15:19) [17]И по средстовам SetString такая же беда как и в [13] только теперь HTML- код отображается корректоно.
← →
Verg © (2004-05-02 16:17) [18]Удалено модератором
Примечание: Выясняйте отношения в чате или по почте...
← →
Verg © (2004-05-02 16:18) [19]Удалено модератором
Примечание: Выясняйте отношения в чате или по почте...
← →
Verg © (2004-05-02 16:35) [20]Удалено модератором
Примечание: Выясняйте отношения в чате или по почте...
← →
-=Rezya=- (2004-05-02 23:29) [21]Удалено модератором
Примечание: Выясняйте отношения в чате или по почте...
← →
-=Rezya=- (2004-05-02 23:47) [22]Удалено модератором
Примечание: Со стороны модератора извининия приняты, Андрею твой пост отправлен, но пропустить его в форум я не могу...
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.039 c