Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

19.01.2009, 22:31
|
|
Новичок
Регистрация: 02.07.2008
Сообщений: 17
Провел на форуме: 93013
Репутация:
8
|
|
Перехват пакетов
Решил написать программку для пеерхвата пакетов только для моего компьютера, для начала хотя бы читать их содержимое...
Начал писать на С++, но прога не очень то и работает... Непонятно когда и по каким принцыпам(лично для меня так) она выводит содержимое пакетов(и то не всё)... Может мне ктонибудь подскажет аглоритм и программые методы для осуществение моей цели...
Код:
#include <winsock2.h>
#include <windows.h>
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#pragma comment( lib, "wsock32.lib" )
int main()
{
WSADATA wd;
char buff[1000];
SOCKET s, news;
sockaddr_in sin, newsin;
sin.sin_family = AF_INET;
sin.sin_port = htons(2593);
sin.sin_addr.s_addr = inet_addr("127.0.0.1");
if(FAILED(WSAStartup( MAKEWORD(2,2), &wd)) )
{
cout<<"WSA error - "<<WSAGetLastError()<<endl;
return -1;
}
if( (s=socket(AF_INET,SOCK_STREAM,0)) == -1 )
{
cout<<"WSA error - "<<WSAGetLastError()<<endl;
return -1;
}
if(bind(s, (sockaddr*)&sin, sizeof(sin) ) == -1 )
{
cout<<"Can't bind"<<endl;
return -1;
}
cout<<"Wait for connections..."<<endl;
int i=0, len = sizeof(newsin);
if(listen(s,5) == -1)
{
cout<<"Cant listen"<<endl;
}
int c = 0, tmp;
while( c < 1 )
{
if( (news = accept(s, (sockaddr*)&newsin, &len)) == INVALID_SOCKET )
{
cout<<"Accept failed"<<endl;
getch();
return -1;
}
else
{
cout<<"New client "<<c<<endl;
int msg;
if(FAILED(msg = recv(news, buff, sizeof(buff),0 )))
return E_FAIL;
for(int i = 0; i < 1000; i++)
if( isalnum(buff[i]) )
cout<<buff[i];
cout<<endl;
//closesocket(news);
++c;
}
}
tmp = recv(news,buff, sizeof(buff),0 );
if( tmp != SOCKET_ERROR )
for(int i = 0; i < 1000; i++)
if( isalnum(buff[i]) )
cout<<buff[i];
tmp = recv(news,buff, sizeof(buff),0 );
if( tmp != SOCKET_ERROR )
for(int i = 0; i < 1000; i++)
if( isalnum(buff[i]) )
cout<<buff[i];
closesocket(s);
closesocket(news);
WSACleanup();
return 0;
}
Код как я сам понимаю - бред...
|
|
|

19.01.2009, 22:43
|
|
Участник форума
Регистрация: 17.06.2008
Сообщений: 161
Провел на форуме: 2550251
Репутация:
207
|
|
Почемуже бред?В некоторих местах криво,хотя в полне прилично))))
Зы:Я новичок  )))
|
|
|

19.01.2009, 22:45
|
|
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме: 811764
Репутация:
119
|
|
эммм...у меня глюк или ты не перевел интерфейс в promisc-режим?
http://forum.antichat.ru/showthread.php?p=1011673
ТС, твой код пример обычного клиент/сервернго приложения...тока без клиента)))
Последний раз редактировалось criz; 19.01.2009 в 23:00..
|
|
|

19.01.2009, 23:54
|
|
Новичок
Регистрация: 02.07.2008
Сообщений: 17
Провел на форуме: 93013
Репутация:
8
|
|
Сообщение от Qws
Почемуже бред?В некоторих местах криво,хотя в полне прилично))))
Зы:Я новичок  )))
Я например захожу в КС... оно должно мне выводить на экран содержимое пакетов при игре а оно мне выводит пустоту напостой..
Сообщение от criz
эммм...у меня глюк или ты не перевел интерфейс в promisc-режим?
http://forum.antichat.ru/showthread.php?p=1011673
ТС, твой код пример обычного клиент/сервернго приложения...тока без клиента)))
это да... за ссылочку спасибо.. но там заумный для меня код... может есть что по проще... может на Delphi... И ещё по той ссылке что ты мне дал упоминался WinAPI и сетевые протоколы низких уровней... Может они проще...
Последний раз редактировалось WON; 19.01.2009 в 23:58..
|
|
|

20.01.2009, 00:49
|
|
Познающий
Регистрация: 04.07.2008
Сообщений: 56
Провел на форуме: 390892
Репутация:
60
|
|
WON
Твой код не предназначен для перехвата пакетов.
Тут http://www.ntkernel.com/w&p.php?id=14 расписаны методы перехвата пакетов, позволяющие их редактировать.
Самый простой способ внедрять в каждый процесс библиотеку, перехватывающую функции для работы с сокетами (модификация IAT или сплайзинг connect, send, sendto, WSASend, WSASendTo, recv, recvfrom, WSARecv).
|
|
|

20.01.2009, 00:51
|
|
Участник форума
Регистрация: 29.12.2008
Сообщений: 118
Провел на форуме: 795987
Репутация:
64
|
|
чем тебе пабликовские сниферы не нравятся?)
|
|
|

20.01.2009, 07:51
|
|
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме: 811764
Репутация:
119
|
|
Сообщение от WON
но там заумный для меня код... может есть что по проще... может на Delphi... И ещё по той ссылке что ты мне дал упоминался WinAPI и сетевые протоколы низких уровней... Может они проще...
В первом твоем посте С-шный код, я тебе дал ссылку на С-шный код.
Может тебе надо сначала ознакомиться с документацией по TCP/IP? Потом код не будет казаться "заумным" 
|
|
|

20.01.2009, 16:42
|
|
Новичок
Регистрация: 02.07.2008
Сообщений: 17
Провел на форуме: 93013
Репутация:
8
|
|
Сообщение от criz
В первом твоем посте С-шный код, я тебе дал ссылку на С-шный код.
Может тебе надо сначала ознакомиться с документацией по TCP/IP? Потом код не будет казаться "заумным" 
Чесно говря я не пытался казаться "заумным", просто в той ссылке что ты мне дал говорилось что есть готовые WinAPI функции и что с ними легче рабаотать... Спасибо... буду разбираться с тем кодом что есть...
|
|
|

20.01.2009, 16:46
|
|
Постоянный
Регистрация: 20.12.2007
Сообщений: 577
Провел на форуме: 1636674
Репутация:
171
|
|
глянь сорцы того-же wireshark'a. он на Сях-же, вроде
|
|
|

20.01.2009, 16:51
|
|
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме: 811764
Репутация:
119
|
|
WON, твой код отличается несколькими строчками: нет перевода интерфейса в promisc-режим и другой вывод информации 
З.Ы. ну еще там IP-заголовок описан.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|