Help with Raw Sockets Programming

haynes george hmg_u at
Tue Jul 26 09:11:56 CEST 2005


I was going thru some network programming tutorials
and i found a section on raw sockets programming..

I understood what raw sockets are... and i started to
search for some examples related to raw socket

All examples that i found were the kind of ping server
or something of that sort...
What i am looking for is an example where our prgm
runs as a server and it outputs all packets of a
particluar protocol (eg: TCP) recieved on the host on
which this server is running

I even tried to code this but i failed... This is what
i did



/** All the necessary headers **/

       int sockfd;
      struct sockaddr_in myaddr;

      if( ( sockfd = socket (

//Whether we should bind or not ... i have a doubt 
// Anyway i didnot 
// The tutorial said that as all IP packets with the
protocol field as that set to the protocol
//field of the socket() call will be given to the raw

.// So now i read from the socket using the function
call recvfrom() as this is a 
//connectionless setup
//Is there a need to setup any fields of remoteaddr

while( recvfrom ( sockfd, buffer , 4096 ,0 ,  (struct
sockaddr *)&remoteaddr , sizeof(struct sockaddr )) >

       printf("caught packet.. %s",buffer);

return 0;


On running the above code it gave an error with the
recvfrom() function


 RECVFROM: Operation on non-socket type

How can i modify the above code so that it recieves
all TCP packets that arrive on the host and prints
them out....

The tutorial i was reading said that the kernel
forwards all packets to the raw socket which has the
protocol number matching as that of the IP datagram
which the host recieved. So shouldn't this print all
tcp packets that arrive at the host ??



How much free photo storage do you get? Store your friends 'n family snaps for FREE with Yahoo! Photos

More information about the netfilter mailing list