Вопрос про Firewall

Ответить
Аватара пользователя
netmax

Вопрос про Firewall

Сообщение netmax »

Вот какая штука. Решил я написать простой пример firewall, и тут же столкнулся с главной проблемой. А как же я буду улавливать трафик. Скажем я хочу следить за трафиком на 139 порту (NetBios). Но если я попытаюсь создать на нем сокет, то возникнет ошибка, поскольку этот порт уже занят другим сервисом. Но как-то ведь народ делает firewall'ы. Может кто знает?
Аватара пользователя
netmax

Re: Вопрос про Firewall

Сообщение netmax »

Вот
статейка
,хотя она про сниферы. Но,имхо,там принцип один и тот же.
Аватара пользователя
hasherfrog

Re: Вопрос про Firewall

Сообщение hasherfrog »

Надыбал (давненько уже) в сети. Очень простенький пример. Под линукс, но принцип тот же. Вообще подобных "сорсов" в сети - море.



Код:

Код: Выделить всё

 
// cниффер пишет на stdout всё, что захватывает 
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
static volatile int done; 
void handler(int signum) 
{ 
       done = 1; 
} 
int main(int argc, char **argv) 
{ 
       char buff[0x10000]; 
       struct ifreq ifr; 
       int s, n; 
       if (argc < 2) 
       { 
              fprintf(stderr, "Usage: %s \n", argv[0]); 
              return 1; 
       } 
       s = socket(PF_INET, SOCK_PACKET, htons(0x0003)); 
       if (s == -1) 
       { 
              perror("socket"); 
              return 1; 
       } 
       strcpy(ifr.ifr_name, argv[1]); 
       if (ioctl(s, SIOCGIFFLAGS, &ifr) < 0) 
       { 
              perror("ioctl(SIOCGIFFLAGS)"); 
              return 1; 
       } 
       ifr.ifr_flags |= IFF_PROMISC; // установка 
                                      // режима перехвата 
                                      // на сетевой карте. 
       if (ioctl(s, SIOCSIFFLAGS, &ifr) < 0) 
       { 
              perror("ioctl(SIOCGIFFLAGS)"); 
              return 1; 
       } 
       signal(SIGINT, handler); 
        puts("starting capturing:\n"); 
       fflush(stdout); 
       for (done = 0; !done; ) 
       { 
              n = read(s, buff, sizeof(buff)); 
                //cчитываем 
                //траффик в буфер 
              if ( n!=-1 ) write(STDOUT_FILENO, buff, n); 
       } 
       ifr.ifr_flags &= ~IFF_PROMISC; 
       if (ioctl(s, SIOCSIFFLAGS, &ifr) < 0) 
       { 
              perror("ioctl(SIOCGIFFLAGS)"); 
              return 1; 
       } 
       close(s); 
        printf("Finished\n"); 
        return 0; 
}
Аватара пользователя
netmax

Re: Вопрос про Firewall

Сообщение netmax »

hasherfrog

Спасибо. Гляну. На порту 0х03 уже находится сокет, будет ли работать? Хотя ладно сам проверю.

BrutalBit

А чем они отличаются?
Аватара пользователя
netmax

Re: Вопрос про Firewall

Сообщение netmax »

Сниффер - это такая прога, которая перехватывает весь траффик.Они используются для перехвата всякой инфы(паролей) и для диагностики сети.

Firewall - это программа фильтрующая все вхлдящие/исходящие данные, и пропускающая только разрешенные.И там и там нужно перехватывать траффик,но тока firewall должен его еще и фильтровать.
Аватара пользователя
BrutalBit

Re: Вопрос про Firewall

Сообщение BrutalBit »

Хорошо, но это все эти примеры для Linux. Мне они конечно и нужны для этой ОС.  Но...  как же быть с windows?
Аватара пользователя
hasherfrog

Re: Вопрос про Firewall

Сообщение hasherfrog »

VBMUSTDIE

Практически всё точно так же. Единственное, на что стоит обратить нимание: версия winsock должная быть 2-й. В ранней версии плохо расписана работа с "сырыми" сокетами. Есть, конечно, ещё некоторые ньюансы.

По поводу файерволл - проверьте почту.



Добавлено:



VBMUSTDIE

Ваш адрес в e-mail, очевидно, некорректный. Письма возвращаются.
Аватара пользователя
mar

Re: Вопрос про Firewall

Сообщение mar »

hasherfrog

а если пример firewall-а, то можно не только для  VBMUSTDIE Изображение
Ответить

Вернуться в «Программирование и базы данных»