Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Как считать трафик с интерфейса?  (Прочитано 1185 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн danilsl

  • Автор темы
  • Участник
  • *
  • Сообщений: 170
    • Просмотр профиля
Всем привет.
Есть самопальная клиент-серверная приложуха. И она гонит. Для того чтобы понять где ошибка мне нужен полный лог переговоров клиента с сервером. Между ними кроме провов находится linux-роутер, который перенаправляет запросы с улицы на сервер в локалке. Именно на нём я бы и хотел отловить все пакетики, ходящие по нужным портам. Порыл интернет, написал прогу:
#include <stdio.h>
#include <linux/if_ether.h>
#include <sys/types.h>
#include <netinet/in.h>

#define BUF_SIZE 2048

int main(int argc, char** argv) {
    int s;
    char buf[BUF_SIZE];
    int rc;
   
    if(s = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)) < 0){
        fprintf(stderr, "Can't get socket\n");
        return -1;
    }
   
    while(1){
        rc = recvfrom(s, buf, BUF_SIZE, 0, NULL, NULL);
        if(rc >= 0)
            printf("%i\n", rc);
    }
    return 0;
}

Запускаю из под рута, перед этим ifconfig eth0 promisc.
Однако recvfrom постоянно возвращает -1. И ничего другого.
Подскажите пожалуйста, как мне содрать весь TCP трафик, идущий на определённый порт
Заранее благодарен

Оффлайн hippi90

  • Активист
  • *
  • Сообщений: 433
    • Просмотр профиля
Re: Как считать трафик с интерфейса?
« Ответ #1 : 31 Марта 2011, 00:12:00 »
Так может tcpdump использовать?

Оффлайн danilsl

  • Автор темы
  • Участник
  • *
  • Сообщений: 170
    • Просмотр профиля
Re: Как считать трафик с интерфейса?
« Ответ #2 : 31 Марта 2011, 00:28:56 »
Мне нужны наблюдения за большой период, плюс инфу о каждом пакете нужно в базу загнать для сбора статистики

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Как считать трафик с интерфейса?
« Ответ #3 : 31 Марта 2011, 09:49:59 »
Возьми исходники tcpdump это прекрасный пример для написания своих снифферов
"И делай с ним что хочешь" (с)

Оффлайн mkarasik

  • Участник
  • *
  • Сообщений: 163
    • Просмотр профиля
Re: Как считать трафик с интерфейса?
« Ответ #4 : 31 Марта 2011, 19:55:16 »
Ты не сделал bind т.е. ты не открыл ресив на своем сокете. Сделай bind на интерфейс ив се будет пучком. Единственное, что придется запаривать над фрагментацией ИП пакетов. Проще поставить wireshark и отфильтровать его по протоколу и порту.

 

Страница сгенерирована за 0.053 секунд. Запросов: 25.