Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Вопрос про Firewall (http://forum.oszone.net/showthread.php?t=29596)

netmax 03-07-2004 19:25 204841

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

BrutalBit 03-07-2004 21:22 204842

Вот статейка,хотя она про сниферы. Но,имхо,там принцип один и тот же.

hasherfrog 05-07-2004 10:44 204843

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


// cниффер пишет на stdout всё, что захватывает
#include <sys/socket.h>
#include <netinet/in.h>
#include <net/if.h>
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <sys/ioctl.h>
 
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 <interface>\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 05-07-2004 18:21 204844

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

BrutalBit 05-07-2004 22:47 204845

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

netmax 12-07-2004 19:10 204846

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

hasherfrog 13-07-2004 09:43 204847

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

Добавлено:

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

mar 13-07-2004 22:15 204848

hasherfrog
а если пример firewall-а, то можно не только для  VBMUSTDIE :)


Время: 16:43.

Время: 16:43.
© OSzone.net 2001-