What's wrong?
I'm writing an mrtg-like program. It's finished but i dont want to use the
kernel's ip accounting, so I try to write a RAW SOCKET based traffic
counter. I've written a small program following by the socket faq and man
pages, but i think it's reading bad ip headers. Here is the program:
--------- cut here ---------------
#include <netdb.h>
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <syslog.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
#include <netinet/udp.h>
#include <netinet/ip_icmp.h>
extern int errno;
#define PROTO htons(0x0800)
struct ip_pkt {
struct iphdr ip;
char *buffer;
} pkt;
int main(void)
{
int s;
struct in_addr in;
if ((s = socket(AF_INET, SOCK_PACKET, PROTO)) == -1) {
perror("socket");
exit(0);
}
while(1)
{
read(s, &pkt, sizeof(struct ip_pkt));
in.s_addr = pkt.ip.saddr;
printf("IP Packet from: %s\n", inet_ntoa(in));
}
}
-------------- cut here --------------
What did i wrong? Please some1.
--
Regards,
Tibor Koleszár
=[ IntegraNET ]===[ Internet Service Provider Corporation ]=
[ Koleszar Tibor - System engineer ]
[ E-mail : t.koleszar@somogy.hu ]
============================================================
Reply to: