Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Название темы: Вопрос про Firewall
Показать сообщение отдельно

Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Надыбал (давненько уже) в сети. Очень простенький пример. Под линукс, но принцип тот же. Вообще подобных "сорсов" в сети - море.
Код: Выделить весь код
 
// 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; 
}

Отправлено: 10:44, 05-07-2004 | #3

Название темы: Вопрос про Firewall