MY[p]CAP - simple packet capture library...
MYcap is a small set of functions that make packet capturing easy. It allows users to write their
own packet processing functions and don't care about the methods to obtain the raw packets. All
that user have to know is the way packets are built, and how to extract data from the raw packets.
There are only three steps in capturing packets with mycap.
Creating a new session with mycap, which causes a new raw packet listening socket is created in the system.
Through this socket we'll be able to receive a raw binary stream from packets flow, going from and to
any network interface installed on the system.
Running a packet capturing loop. This is the heart of mycap, here all the packets are actually captured and
passed to packet handling function. Mycap loop is in fact a passive loop waiting for incoming packets,
when called inside other program it will stop execution of code until it ends (end loop function).
Starting the packet capturing loop requires a packet handling function, which will be associated with
current session. Every time the packet loop captures a packet it passes it to an associated packet handling
function.
The only limitation is that the packet handling function must be of specific prototype:
void *function(void *, mycap_header *, unsigned char *);
|
In the first argument it gets the parameters passed by user, then the header prepared by
mycap loop (code below) and the pointer to the buffer containing the raw packet.
typedef struct mycap_header_s{
int caplen;
char ifname[8];
unsigned char pkttype;
} mycap_header_t;
|
After passing the packet to the function, the loop will wait for the function to finish its work, before it will
pass it another packet. It's because the time required by the function to process the packet depends on the packet
filters applied to that function and the execution time of the function itself, which can vary on slower cpu
types. While reading packets, loop uses the system buffer, but if the packet processing function requires more
time then the rate of incoming packets, instead of running another function to process the excess of packets,
the loop drops them. This way even if some packets are dropped, the loop won't cause any overload to the system.
Using the end loop function on a mycap session will stop the packet reading loop and continue executing the code
below the call to the mycap loop. The loop may be restarted at any later time.
To end packet capturing finally, user closes the mycap session, the packet socket is closed and memory used by the
session is freed. After this point, to run packet capturing loop, user must create another mycap session.
M.K.
|