メイン   モジュール   デー タ構造   ファイルリスト   データフィールド   グローバル   関連ページ   注意事項   English

daemon.c File Reference

#include <pcap.h>
#include <pcap-int.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include "pcap-remote.h"
#include "daemon.h"
#include "sockutils.h"

Go to the source code of this file.


Functions

int  daemon_checkauth (SOCKET sockctrl, int nullAuthAllowed, char *errbuf)
  It checks if the authentication credentials supplied by the user are valid.

int  daemon_AuthUserPwd (char *username, char *password, char *errbuf)
int  daemon_findalldevs (SOCKET sockctrl, char *errbuf)
int  daemon_opensource (SOCKET sockctrl, char *source, int srclen, uint32 plen, char *errbuf)
pcap_t daemon_startcapture (SOCKET sockctrl, char *source, int active, uint32 plen, char *errbuf)
int  daemon_endcapture (pcap_t *fp, char *errbuf)
int  daemon_updatefilter (pcap_t *fp, uint32 plen)
int  daemon_unpackapplyfilter (pcap_t *fp, unsigned int *nread, int *plen, char *errbuf)
int  daemon_getstats (pcap_t *fp)
int  daemon_getstatsnopcap (SOCKET sockctrl, unsigned int ifdrops, unsigned int ifrecv, unsigned int krnldrop, unsigned int svrcapt, char *errbuf)
void  daemon_seraddr (struct sockaddr_storage *sockaddrin, struct sockaddr_storage *sockaddrout)
  It serializes a network address.

void  daemon_thrdatamain (void *ptr)
void  daemon_serviceloop (void *ptr)
  Main serving funtion This function is the one which does the job. It is the main() of the child thread, which is created as soon as a new connection is accepted.


Variables

char  fakeerrbuf [PCAP_ERRBUF_SIZE+1]


Function Documentation

int daemon_AuthUserPwd char *    username,


char *    password,


char *    errbuf


 

Definition at line 599 of file daemon.c.

References pcap_strerror(), and snprintf.

Referenced by daemon_checkauth().

int daemon_checkauth SOCKET    sockctrl,


int    nullAuthAllowed,


char *    errbuf


 

It checks if the authentication credentials supplied by the user are valid.

This function is called each time the rpcap daemon starts a new serving thread. It reads the authentication message from the network and it checks that the user information are valid.

Parameters:
sockctrl:  the socket if of the control connection.
nullAuthAllowed:  '1' if the NULL authentication is allowed.
errbuf:  a user-allocated buffer in which the error message (if one) has to be written.
Returns:
'0' if everything is fine, '-1' if an unrecoverable error occurred. The error message is returned in the 'errbuf' variable. '-2' is returned in case the authentication failed or in case of a recoverable error (like wrong version). In that case, 'errbuf' keeps the reason of the failure. This provides a way to know that the connection does not have to be closed.
In case the message is a 'CLOSE' or an 'ERROR', it returns -3. The error can be due to a connection refusal in active mode, since this host cannot be allowed to connect to the remote peer.

Definition at line 444 of file daemon.c.

References daemon_AuthUserPwd(), nullAuthAllowed, pcap_strerror(), rpcap_checkmsg(), rpcap_createhdr(), RPCAP_MSG_AUTH_REQ, RPCAP_MSG_CLOSE, RPCAP_MSG_ERROR, RPCAP_RMTAUTH_NULL, RPCAP_RMTAUTH_PWD, snprintf, SOCK_ASSERT, sock_discard(), sock_recv(), and sock_send().

Referenced by daemon_serviceloop().

int daemon_endcapture pcap_t   fp,


char *    errbuf


 

Definition at line 1116 of file daemon.c.

References pcap_close(), rpcap_createhdr(), sock_close(), sock_send(), and SOCKET.

Referenced by daemon_serviceloop().

int daemon_findalldevs SOCKET    sockctrl,


char *    errbuf


 

Definition at line 692 of file daemon.c.

References address, pcap_if::addresses, daemon_seraddr(), rpcap_findalldevs_if::desclen, pcap_if::description, pcap_if::flags, rpcap_findalldevs_if::flags, rpcap_findalldevs_if::naddr, pcap_if::name, rpcap_findalldevs_if::namelen, pcap_if::next, pcap_findalldevs(), pcap_freealldevs(), rpcap_createhdr(), RPCAP_NETBUF_SIZE, rpcap_senderror(), sock_bufferize(), sock_send(), and uint16.

Referenced by daemon_serviceloop().

int daemon_getstats pcap_t   fp
 

Definition at line 1248 of file daemon.c.

References rpcap_stats::ifdrop, rpcap_stats::ifrecv, rpcap_stats::krnldrop, pcap_stats(), pcap_stat::ps_drop, pcap_stat::ps_ifdrop, pcap_stat::ps_recv, rpcap_createhdr(), RPCAP_NETBUF_SIZE, rpcap_senderror(), sock_bufferize(), sock_send(), and rpcap_stats::svrcapt.

Referenced by daemon_serviceloop().

int daemon_getstatsnopcap SOCKET    sockctrl,


unsigned int    ifdrops,


unsigned int    ifrecv,


unsigned int    krnldrop,


unsigned int    svrcapt,


char *    errbuf


 

Definition at line 1287 of file daemon.c.

References rpcap_stats::ifdrop, rpcap_stats::ifrecv, rpcap_stats::krnldrop, rpcap_createhdr(), RPCAP_NETBUF_SIZE, rpcap_senderror(), sock_bufferize(), sock_send(), and rpcap_stats::svrcapt.

Referenced by daemon_serviceloop().

int daemon_opensource SOCKET    sockctrl,


char *    source,


int    srclen,


uint32    plen,


char *    errbuf


 

Definition at line 820 of file daemon.c.

References rpcap_openreply::linktype, pcap_close(), pcap_open(), pcap_t, rpcap_createhdr(), RPCAP_NETBUF_SIZE, rpcap_senderror(), sock_bufferize(), sock_discard(), sock_recv(), sock_send(), and rpcap_openreply::tzoff.

Referenced by daemon_serviceloop().

void daemon_seraddr struct sockaddr_storage *    sockaddrin,


struct sockaddr_storage *    sockaddrout


 

It serializes a network address.

It accepts a 'sockaddr_storage' structure as input, and it converts it appropriately into a format that can be used to be sent on the network. Basically, it applies all the hton() conversion required to the input variable.

Parameters:
sockaddrin:  a 'sockaddr_storage' pointer to the variable that has to be serialized. This variable can be both a 'sockaddr_in' and 'sockaddr_in6'.
sockaddrout:  a 'sockaddr_storage' pointer to the variable that will contain the serialized data. This variable has to be allocated by the user.
Returns:
None
Warning:
This function supports only AF_INET and AF_INET6 address families.

Definition at line 1421 of file daemon.c.

Referenced by daemon_findalldevs().

void daemon_serviceloop void *    ptr
 

Main serving funtion This function is the one which does the job. It is the main() of the child thread, which is created as soon as a new connection is accepted.

Parameters:
ptr:  a void pointer that keeps the reference of the 'pthread_chain' value corrisponding to this thread. This variable is casted into a 'pthread_chain' value in order to retrieve the socket we're currently using, the therad ID, and some pointers to the previous and next elements into this struct.
Returns:
None.

Definition at line 104 of file daemon.c.

References daemon_slpars::activeclose, daemon_checkauth(), daemon_endcapture(), daemon_findalldevs(), daemon_getstats(), daemon_getstatsnopcap(), daemon_opensource(), daemon_startcapture(), daemon_updatefilter(), errbuf, daemon_slpars::isactive, daemon_slpars::nullAuthAllowed, PCAP_BUF_SIZE, pcap_close(), PCAP_ERRBUF_SIZE, pcap_stats(), pcap_t, pcap_stat::ps_drop, pcap_stat::ps_ifdrop, pcap_stat::ps_recv, pthread_suspend(), rpcap_checkmsg(), RPCAP_MSG_CLOSE, RPCAP_MSG_ENDCAP_REQ, RPCAP_MSG_ERROR, RPCAP_MSG_FINDALLIF_REQ, RPCAP_MSG_OPEN_REQ, RPCAP_MSG_STARTCAP_REQ, RPCAP_MSG_STATS_REQ, RPCAP_MSG_UPDATEFILTER_REQ, rpcap_senderror(), RPCAP_TIMEOUT_INIT, RPCAP_TIMEOUT_RUNTIME, SOCK_ASSERT, sock_close(), sock_discard(), sock_geterror(), sock_recv(), and daemon_slpars::sockctrl.

Referenced by main_active(), and main_passive().

pcap_t * daemon_startcapture SOCKET    sockctrl,


char *    source,


int    active,


uint32    plen,


char *    errbuf


 

Definition at line 903 of file daemon.c.

References rpcap_startcapreply::bufsize, daemon_unpackapplyfilter(), PCAP_BUF_SIZE, pcap_close(), pcap_open(), pcap_t, rpcap_startcapreply::portdata, rpcap_createhdr(), RPCAP_NETBUF_SIZE, rpcap_senderror(), RPCAP_STARTCAPREQ_FLAG_DGRAM, RPCAP_STARTCAPREQ_FLAG_SERVEROPEN, snprintf, sock_bufferize(), sock_close(), sock_discard(), sock_geterror(), sock_open(), sock_recv(), sock_send(), sock_validaddr(), and SOCKET.

Referenced by daemon_serviceloop().

void daemon_thrdatamain void *    ptr
 

Definition at line 1323 of file daemon.c.

References rpcap_pkthdr::caplen, pcap_pkthdr::caplen, errbuf, pcap_pkthdr::len, rpcap_pkthdr::len, rpcap_pkthdr::npkt, PCAP_ERRBUF_SIZE, pcap_geterr(), pcap_next_ex(), pcap_t, rpcap_createhdr(), RPCAP_NETBUF_SIZE, rpcap_senderror(), snprintf, SOCK_ASSERT, sock_bufferize(), sock_send(), rpcap_pkthdr::timestamp_sec, rpcap_pkthdr::timestamp_usec, and pcap_pkthdr::ts.

int daemon_unpackapplyfilter pcap_t   fp,


unsigned int *    nread,


int *    plen,


char *    errbuf


 

Definition at line 1147 of file daemon.c.

References bpf_program::bf_len, bpf_validate(), bpf_insn::code, bpf_insn::jf, bpf_insn::jt, bpf_insn::k, pcap_setfilter(), pcap_strerror(), RPCAP_UPDATEFILTER_BPF, snprintf, and sock_recv().

Referenced by daemon_startcapture(), and daemon_updatefilter().

int daemon_updatefilter pcap_t   fp,


uint32    plen


 

Definition at line 1210 of file daemon.c.

References daemon_unpackapplyfilter(), rpcap_createhdr(), rpcap_senderror(), sock_discard(), and sock_send().

Referenced by daemon_serviceloop().


Variable Documentation

char fakeerrbuf[PCAP_ERRBUF_SIZE + 1]
 

Definition at line 82 of file daemon.c.


documentation. Copyright (c) 2002-2003 Politecnico di Torino.
2005 translated by Telebusiness,Inc.
 All rights reserved.