Всем привет.
Есть самопальная клиент-серверная приложуха. И она гонит. Для того чтобы понять где ошибка мне нужен полный лог переговоров клиента с сервером. Между ними кроме провов находится 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 трафик, идущий на определённый порт
Заранее благодарен