Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Отправка сырого пакета (https://forum.antichat.xyz/showthread.php?t=181185)

ntldr 23.02.2010 02:27

Отправка сырого пакета
 
PHP код:

struct sockaddr_in sin;

    
sin.sin_family AF_INET;
    
sin.sin_port htons(80);
    
sin.sin_addr.s_addr inet_addr("192.168.0.100");
    
    
char datagram[sizeof(ipheader)+sizeof(tcpheader)];
    
ipheader *iph = (ipheader *)datagram;
    
tcpheader *tcph = (tcpheader *)(datagram sizeof(ipheader));
    
PS_HDR pseudo_header;

    
memset(datagram0sizeof(datagram));

    
iph->ip_hl         5;
    
iph->ip_v         4;
    
iph->ip_tos         0;
    
iph->ip_len         sizeof(ipheader) + sizeof(tcpheader);
    
iph->ip_id         rand();
    
iph->ip_off         0;
    
iph->ip_ttl         255;
    
iph->ip_p         IPPROTO_TCP;
    
iph->ip_sum         0;
    
iph->ip_src         inet_addr("192.168.0.100");
    
iph->ip_dst         sin.sin_addr.s_addr;

    
tcph->th_sport     htons(getrandom(01500));
    
tcph->th_dport     sin.sin_port;
    
tcph->th_seq     rand();
    
tcph->th_ack     0;
    
tcph->th_x2         0;
    
tcph->th_off     5;
    
tcph->th_flags     TH_SYN;
    
tcph->th_win     htons(512);
    
tcph->th_sum     0;
    
tcph->th_urp     0;

    
pseudo_header.source_address  iph->ip_src;
    
pseudo_header.dest_address      sin.sin_addr.s_addr;
    
pseudo_header.placeholder      0;
    
pseudo_header.protocol          IPPROTO_TCP;
    
pseudo_header.tcp_length      htons(sizeof(tcpheader));

    
memcpy((char*)&pseudo_header.tcptcphsizeof(tcpheader));
    
iph->ip_sum  checksum((unsigned short *)&iphsizeof(ipheader));
    
tcph->th_sum checksum((unsigned short *)&pseudo_headersizeof(pseudo_header));
 
    if (
sendto(sdatagramsizeof(datagram), 0, (SOCKADDR *)&sinsizeof(sin)) == SOCKET_ERROR)
        return -
1

в общем - пытаюсь отправить сырой SYN-пакет, но он не доходит, а сниффер пишет что адрес и порт отправки и назначения пустые. Адрес src И адрес сетевухи совпадают

desTiny 23.02.2010 02:33

я не вижу слова socket

ntldr 23.02.2010 02:38

Цитата:

Сообщение от desTiny
я не вижу слова socket

ну я как бы убрал все лишнее тк работает как надо. ну вот то что перед этим

PHP код:

int bOpt 1
WSADATA asd;
WSAStartup(MAKEWORD(2,2),&asd);
SOCKET s socket(PF_INETSOCK_RAWIPPROTO_RAW);
setsockopt(sIPPROTO_IPIP_HDRINCL, (char *)&bOptsizeof(bOpt)) 


razb 23.02.2010 03:41

Мб лучше pcap заюзать? )

xa-xa89 23.02.2010 04:47

я может глупость скажу, но...
memset(datagram, 0, sizeof(datagram));
после этого с datagram ничего не произошло кроме как:
sendto(s, datagram, sizeof(datagram), 0, (SOCKADDR *)&sin, sizeof(sin)
соответственно оно отправляет все пустое(забитое нулями)
или я чего-то не понял...

slesh 23.02.2010 11:33

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

ntldr 23.02.2010 12:26

Цитата:

Сообщение от xa-xa89
я может глупость скажу, но...
memset(datagram, 0, sizeof(datagram));
после этого с datagram ничего не произошло кроме как:
sendto(s, datagram, sizeof(datagram), 0, (SOCKADDR *)&sin, sizeof(sin)
соответственно оно отправляет все пустое(забитое нулями)
или я чего-то не понял...

ну да, вы не поняли :)
PHP код:

ipheader *iph = (ipheader *)datagram
    
tcpheader *tcph = (tcpheader *)(datagram sizeof(ipheader)); 

этот код размечает эту строку на ip header и tcp header. Ну и сниффер показывает какую-то информацию в пакете

2razb - pcap сложный, стоит не везде

2slesh - проверил, совпадают

ntldr 24.02.2010 00:35

http://dl.dropbox.com/u/3104173/syn.jpg

сниффер показывает, как я понял, что эти данные как-то попали в тело пакета, а не в заголовок

sn0w 25.02.2010 12:06

Цитата:

Сообщение от slesh
Также не забывай, что винда не выпустит пакеты с поддельным адресом отправителя.

при использовании IP_HDRINCL да, но для udp.
а для tcp эта опция запрещена вообще.

поэтому решением является пикап =)

а вообще, если хочется чегото "своего", то
есть хороший пример из WDK - NDISPROT, для отправки вплоть до фальшивого исходного мак адреса вполне подойдет

ntldr 25.02.2010 14:54

Цитата:

Сообщение от sn0w
при использовании IP_HDRINCL да, но для udp.
а для tcp эта опция запрещена вообще.

поэтому решением является пикап =)

а вообще, если хочется чегото "своего", то
есть хороший пример из WDK - NDISPROT, для отправки вплоть до фальшивого исходного мак адреса вполне подойдет

мне кажется лишний sys за собой таскать не айс. Обойдусь connect() ;)


Время: 23:03