本文整理汇总了C++中pcap_geterr函数的典型用法代码示例。如果您正苦于以下问题:C++ pcap_geterr函数的具体用法?C++ pcap_geterr怎么用?C++ pcap_geterr使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pcap_geterr函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: RotateFile
void RotateFile (pcapfile_t *pcapfile, time_t t_CloseRename, int live)
{
struct pcap_stat p_stat;
void *_b;
dbg_printf ("RotateFile() time: %s\n", UNIX2ISO (t_CloseRename));
// make sure, alternate buffer is already flushed
pthread_mutex_lock (&pcapfile->m_pbuff);
while (pcapfile->alternate_size) {
pthread_cond_wait (&pcapfile->c_pbuff, &pcapfile->m_pbuff);
}
// swap buffers
_b = pcapfile->data_buffer;
pcapfile->data_buffer = pcapfile->alternate_buffer;
pcapfile->data_ptr = pcapfile->data_buffer;
pcapfile->alternate_buffer = _b;
pcapfile->alternate_size = pcapfile->data_size;
pcapfile->t_CloseRename = t_CloseRename;
// release mutex and signal thread
pthread_mutex_unlock (&pcapfile->m_pbuff);
pthread_cond_signal (&pcapfile->c_pbuff);
pcapfile->data_size = 0;
if (live) {
// not a capture file
if (pcap_stats (pcapfile->p, &p_stat) < 0) {
LogError ("pcap_stats() failed: %s", pcap_geterr (pcapfile->p));
} else {
LogInfo ("Packets received: %u, dropped: %u, dropped by interface: %u ",
p_stat.ps_recv, p_stat.ps_drop, p_stat.ps_ifdrop);
}
}
} // End of RotateFile
示例2: foreach
void CompiledFilterOutput::compileFilter()
{
struct bpf_program fcode;
foreach (QString interfaces, intList_) {
for (guint i = 0; i < global_capture_opts.all_ifaces->len; i++) {
interface_t device = g_array_index(global_capture_opts.all_ifaces, interface_t, i);
if (interfaces.compare(device.display_name)) {
continue;
} else {
pcap_t *pd = pcap_open_dead(device.active_dlt, WTAP_MAX_PACKET_SIZE);
g_mutex_lock(pcap_compile_mtx);
if (pcap_compile(pd, &fcode, compile_filter_.toUtf8().constData(), 1, 0) < 0) {
compile_results.insert(interfaces, QString("%1").arg(g_strdup(pcap_geterr(pd))));
g_mutex_unlock(pcap_compile_mtx);
ui->interfaceList->addItem(new QListWidgetItem(QIcon(":expert/expert_error.png"),interfaces));
} else {
GString *bpf_code_dump = g_string_new("");
struct bpf_insn *insn = fcode.bf_insns;
int ii, n = fcode.bf_len;
gchar *bpf_code_str;
for (ii = 0; ii < n; ++insn, ++ii) {
g_string_append(bpf_code_dump, bpf_image(insn, ii));
g_string_append(bpf_code_dump, "\n");
}
bpf_code_str = g_string_free(bpf_code_dump, FALSE);
g_mutex_unlock(pcap_compile_mtx);
compile_results.insert(interfaces, QString("%1").arg(g_strdup(bpf_code_str)));
ui->interfaceList->addItem(new QListWidgetItem(interfaces));
}
break;
}
}
}
}
示例3: main
int main(int argc, char** argv)
{
char *dev, *error_openoffline, *fname, *gen_error;
pcap_t *desc;//declaring the decsriptor
pcap_dumper_t *pd;
struct pcap_pkthdr *header;//declaring packet header
u_char *sp;//packet data written to savefile
dev="eth1";//setting the device as eth1
fname=argv[1];
desc=pcap_open_offline( fname, error_openoffline );
if( desc == NULL )
{
printf("The session could not open as %s", error_openoffline );
exit(1);
}
pd=pcap_dump_open( desc, fname );
if( pd == NULL )
{ gen_error=pcap_geterr( desc );
printf( "\nThe dump could not be opened as %s", gen_error );
exit(1);
}
pcap_dump( (u_char *) pd, header, sp);
printf("\nThe data is %h", sp );
printf("\nThe data is %s", sp );
pcap_dump_close( pd );
pcap_close( desc );
return 0;
}
示例4: load_plugin_filters
void load_plugin_filters(int link_type)
{
struct plugins_list_entry *list = plugins_list;
while (list) {
if ((*list->type.func)) {
/* compiling aggregation filter if needed */
if (list->cfg.a_filter) {
pcap_t *dev_desc;
bpf_u_int32 localnet, netmask = 0; /* pcap library stuff */
char errbuf[PCAP_ERRBUF_SIZE], *count_token;
int idx = 0;
dev_desc = pcap_open_dead(link_type, 128); /* 128 bytes should be long enough */
if (config.dev) pcap_lookupnet(config.dev, &localnet, &netmask, errbuf);
list->cfg.bpfp_a_table[idx] = malloc(sizeof(struct bpf_program));
while ( (count_token = extract_token(&list->cfg.a_filter, ',')) && idx < AGG_FILTER_ENTRIES ) {
if (pcap_compile(dev_desc, list->cfg.bpfp_a_table[idx], count_token, 0, netmask) < 0) {
Log(LOG_WARNING, "WARN: %s\nWARN ( %s/%s ): aggregation filter disabled.\n",
pcap_geterr(dev_desc), list->cfg.name, list->cfg.type);
}
else {
idx++;
list->cfg.bpfp_a_table[idx] = malloc(sizeof(struct bpf_program));
}
}
list->cfg.bpfp_a_num = idx;
}
}
list = list->next;
}
}
示例5: PyErr_SetString
static PyObject *ppcap_set_snaplen(ppcap *self,
PyObject *args)
{
int snaplen;
int retval;
if (!PyArg_ParseTuple(args, "i", &snaplen))
return NULL;
if (!ppcap_isset_handle(self->handle)) {
PyErr_SetString(PyExc_Ppcap, "pcap handle is not created");
return NULL;
}
if (snaplen < MIN_SNAPLEN) {
PyErr_Format(PyExc_Ppcap, "snaplen must be >= %d",
MIN_SNAPLEN);
return NULL;
}
retval = pcap_set_snaplen(self->handle, snaplen);
if (retval == PCAP_ERROR_ACTIVATED) {
PyErr_Format(PyExc_Ppcap, "%s", pcap_geterr(self->handle));
return NULL;
}
Py_RETURN_NONE;
}
示例6: edrv_sendTxBuffer
//------------------------------------------------------------------------------
tOplkError edrv_sendTxBuffer(tEdrvTxBuffer* pBuffer_p)
{
int pcapRet;
// Check parameter validity
ASSERT(pBuffer_p != NULL);
//TRACE("%s: TxB=%p (%02X), last TxB=%p\n", __func__, pBuffer_p, (UINT)pBuffer_p->pBuffer[5], edrvInstance_l.pTransmittedTxBufferLastEntry);
if (pBuffer_p->txBufferNumber.pArg != NULL)
return kErrorInvalidOperation;
EnterCriticalSection(&edrvInstance_l.criticalSection);
if (edrvInstance_l.pTransmittedTxBufferLastEntry == NULL)
{
edrvInstance_l.pTransmittedTxBufferLastEntry =
edrvInstance_l.pTransmittedTxBufferFirstEntry = pBuffer_p;
}
else
{
edrvInstance_l.pTransmittedTxBufferLastEntry->txBufferNumber.pArg = pBuffer_p;
edrvInstance_l.pTransmittedTxBufferLastEntry = pBuffer_p;
}
LeaveCriticalSection(&edrvInstance_l.criticalSection);
pcapRet = pcap_sendpacket(edrvInstance_l.pPcap, pBuffer_p->pBuffer,
(int)pBuffer_p->txFrameSize);
if (pcapRet != 0)
{
DEBUG_LVL_EDRV_TRACE("%s() pcap_sendpacket returned %d (%s)\n",
__func__, pcapRet, pcap_geterr(edrvInstance_l.pPcap));
return kErrorInvalidOperation;
}
return kErrorOk;
}
示例7: output_inject_process
static int output_inject_process(void *obj, struct packet *p, struct proto_process_stack *s, unsigned int stack_index) {
struct output_inject_priv *priv = obj;
struct proto_process_stack *stack = &s[stack_index];
size_t len = stack->plen;
if (len > 1500)
len = 1500;
int bytes = pcap_inject(priv->p, stack->pload, len);
if (bytes == -1) {
pomlog(POMLOG_ERR "Error while injecting packet : %s", pcap_geterr(priv->p));
return POM_ERR;
}
registry_perf_inc(priv->perf_pkts_out, 1);
registry_perf_inc(priv->perf_bytes_out, stack->plen);
return POM_OK;
}
示例8: main
int main(int argc, char const *argv[])
{
char ebuf[PCAP_ERRBUF_SIZE];
pcap_t *pd;
if (argc<=1){
printf("usage :%s <network interface>\n", argv[0]);
return 0;
}
if ((pd=pcap_open_live(argv[1],DEFAULT_SNAPLEN,1,1000,ebuf))==NULL)
{
(void)fprintf(stderr, "1:%s\n", ebuf);
}
if (pcap_loop(pd,-1,packet_print,NULL)<0)
{
(void)fprintf(stderr, "2:pcap_loop: %s\n", pcap_geterr(pd));
}
pcap_close(pd);
return 0;
}
示例9: bpf_compile
static PyObject*
bpf_compile(PyObject* self, PyObject* args)
{
int linktype;
int snaplen;
char *filter;
int optimize;
unsigned int netmask;
if(!PyArg_ParseTuple(args,
"iispI:compile",
&linktype,
&snaplen,
&filter,
&optimize,
&netmask))
return NULL;
pcap_t *pp;
pp = pcap_open_dead(linktype, snaplen);
if(pp == NULL)
return NULL;
struct bpf_program bpf;
int status = pcap_compile(pp, &bpf, filter, optimize, netmask);
pcap_close(pp);
if(status)
{
PyErr_SetString(PcapError, pcap_geterr(pp));
return NULL;
}
return new_bpfobject( &bpf );
}
示例10: pcaprr_daq_acquire
static int pcaprr_daq_acquire(
void *handle, int cnt, DAQ_Analysis_Func_t callback, void *user)
{
Pcaprr_Context_t *context = (Pcaprr_Context_t *) handle;
int ret, i;
pcap_t *thandle;
context->analysis_func = callback;
context->user_data = user;
context->packets = 0;
while (context->packets < cnt || cnt <= 0)
{
for (i = 0 ; i < context->handle_count ; i++) {
thandle = context->handle[i];
ret = pcap_dispatch(
thandle, cnt-context->packets, pcap_process_loop, (void *) context);
/* fprintf(stderr, "dispatch %d %d %d\n", i, cnt, ret); */
if (ret == -1)
{
DPE(context->errbuf, "%s", pcap_geterr(thandle));
return ret;
}
/* In read-file mode, PCAP returns 0 when it hits the end of the file. */
else if (context->file && ret == 0)
return DAQ_READFILE_EOF;
/* If we hit a breakloop call or timed out without reading any packets, break out. */
else if (ret == -2 || ret == 0)
break;
}
}
return 0;
}
示例11: print_stats
/* Print packet capture statistics */
void print_stats() {
struct pcap_stat pkt_stats;
float run_time;
if (pcap_hnd && !use_infile) {
if (pcap_stats(pcap_hnd, &pkt_stats) != 0) {
WARN("Cannot obtain packet capture statistics: %s", pcap_geterr(pcap_hnd));
return;
}
LOG_PRINT("%d packets received, %d packets dropped, %d http packets parsed", \
pkt_stats.ps_recv, pkt_stats.ps_drop, num_parsed);
run_time = (float) (time(0) - start_time);
if (run_time > 0) {
LOG_PRINT("%0.1f packets/min, %0.1f http packets/min", \
((pkt_stats.ps_recv * 60) / run_time), ((num_parsed * 60) / run_time));
}
} else if (pcap_hnd) {
PRINT("%d http packets parsed", num_parsed);
}
return;
}
示例12: RETURN_CODE
int PcapWrapper::sendPacket(int adapter_id, unsigned char* packet_buffer, int buffer_size) {
#ifdef WIN32
if (!checkForAdapterId(adapter_id)) {
// specified adapter not found
RETURN_CODE(RC(ADAPTER_NOT_FOUND));
}
pcap_t* handle = NULL;
if (static_cast<int>(m_adapter_handles.size()) > adapter_id) {
handle = m_adapter_handles[adapter_id];
}
if (!handle) {
fprintf(stderr, "Error: retrievePacket() called on unopened adapter.\n");
RETURN_CODE(RC(ACCESS_ON_UNOPENED_HANDLE));
}
if (pcap_sendpacket(handle, packet_buffer, buffer_size ) < 0) {
fprintf(stderr, "Error: Failed to send the given packet: \n", pcap_geterr(handle));
RETURN_CODE(RC(UNSPECIFIED_ERROR_OCCURED));
}
RETURN_CODE(RC(NORMAL_EXECUTION));
#else
fprintf(stderr, "Error: Wrong function called. pcap_sendpacket(...) only works with WinPcap.\n");
RETURN_CODE(RC(UNSPECIFIED_ERROR_OCCURED));
#endif
}
示例13: main
//.........这里部分代码省略.........
if ( ip_init(&ip_config, IP_SET_MEMCPY) )
{
printf("[!] Unable to initialise the IP library.\n");
exit_clean(1);
}
else
printf("[*] IP library using \"memcpy\" set.\n");
}
else if ( (mode & MODE_DEV) && dev) {
if (getuid()) {
printf("[*] You must be root..\n");
exit_clean(1);
}
printf("[*] Running cxtracker %s\n",VERSION);
//errbuf[0] = '\0';
/* look up an availible device if non specified */
if (dev == 0x0) dev = pcap_lookupdev(errbuf);
printf("[*] Device: %s\n", dev);
if ((handle = pcap_open_live(dev, SNAPLENGTH, 1, 500, errbuf)) == NULL) {
printf("[*] Error pcap_open_live: %s \n", errbuf);
exit_clean(1);
}
// in pcap_open_live(), libpcap maintains a heap allocated buffer
// for reading off the wire. we can use pointer copies here for
// improved speed
if ( ip_init(&ip_config, IP_SET_MEMCPY) )
{
printf("[*] Unable to initialise the IP library.\n");
exit_clean(1);
}
else
printf("[*] IP library using \"memcpy\" set.\n");
if ( chroot_flag == 1 ) {
set_chroot();
}
if(daemon_flag) {
if(!is_valid_path(pidpath))
printf("[*] PID path \"%s\" is bad, check privilege.",pidpath);
openlog("cxtracker", LOG_PID | LOG_CONS, LOG_DAEMON);
printf("[*] Daemonizing...\n\n");
go_daemon();
}
}
else
{
printf("[*] You must specify where to read from.\n");
exit_clean(1);
}
if ((pcap_compile(handle, &cfilter, bpff, 1 ,net_mask)) == -1) {
printf("[*] Error pcap_compile user_filter: %s\n", pcap_geterr(handle));
exit_clean(1);
}
if (pcap_setfilter(handle, &cfilter)) {
printf("[*] Unable to set pcap filter! (%s)\n", pcap_geterr(handle));
} else {
pcap_freecode(&cfilter); // filter code not needed after setfilter
}
// set up dump mode now as appropriate
if (mode & MODE_DUMP ) {
printf("[*] Writing traffic to %s%s.*, rolling every %d %s\n",
dpath, dump_file_prefix, (int)roll_point, rollover_names[(int)roll_type]);
dump_file_open();
}
/* B0rk if we see an error... */
if (strlen(errbuf) > 0) {
printf("[*] Error errbuf: %s \n", errbuf);
exit_clean(1);
}
if(drop_privs_flag) {
printf("[*] Dropping privs...\n\n");
drop_privs();
}
bucket_keys_NULL();
alarm(TIMEOUT);
if (read_file) {
printf("[*] Reading packets...\n");
} else {
printf("[*] Sniffing...\n");
}
roll_time_last = time(NULL);
pcap_loop(handle,-1,got_packet,NULL);
game_over();
return 0;
}
示例14: rtp_collect
void* rtp_collect( void* device ) {
struct bpf_program filter;
char errbuf[PCAP_ERRBUF_SIZE];
char *filter_expr;
uint16_t snaplen = 65535, timeout = 100, len = 300, ret = 0;
if(device) {
if((sniffer_rtp = pcap_open_live((char *)device, snaplen, rtcp_promisc, timeout, errbuf)) == NULL) {
LERR("Failed to open packet sniffer on %s: pcap_open_live(): %s\n", (char *)device, errbuf);
return NULL;
}
} else {
if((sniffer_rtp = pcap_open_offline(usefile, errbuf)) == NULL) {
LERR("Failed to open packet sniffer rtp on %s: pcap_open_offline(): %s\n", usefile, errbuf);
return NULL;
}
}
len += (rtcp_portrange != NULL) ? strlen(rtcp_portrange) : 10;
len += (rtcp_userfilter != NULL) ? strlen(rtcp_userfilter) : 0;
filter_expr = malloc(sizeof(char) * len);
ret += snprintf(filter_expr, len, RTCP_FILTER);
/* FILTER */
if(rtcp_portrange != NULL) ret += snprintf(filter_expr+ret, (len - ret), "%s portrange %s ", ret ? " and": "", rtcp_portrange);
/* CUSTOM FILTER */
if(rtcp_userfilter != NULL) ret += snprintf(filter_expr+ret, (len - ret), " %s", rtcp_userfilter);
/* compile filter expression (global constant, see above) */
if (pcap_compile(sniffer_rtp, &filter, filter_expr, 1, 0) == -1) {
LERR("Failed to compile filter \"%s\": %s\n", filter_expr, pcap_geterr(sniffer_rtp));
if(filter_expr) free(filter_expr);
return NULL;
}
/* install filter on sniffer session */
if (pcap_setfilter(sniffer_rtp, &filter)) {
LERR("Failed to install filter: %s\n", pcap_geterr(sniffer_rtp));
if(filter_expr) free(filter_expr);
return NULL;
}
if(filter_expr) free(filter_expr);
/* detect link_offset. Thanks ngrep for this. */
switch(pcap_datalink(sniffer_rtp)) {
case DLT_EN10MB:
link_offset = ETHHDR_SIZE;
break;
case DLT_IEEE802:
link_offset = TOKENRING_SIZE;
break;
case DLT_FDDI:
link_offset = FDDIHDR_SIZE;
break;
case DLT_SLIP:
link_offset = SLIPHDR_SIZE;
break;
case DLT_PPP:
link_offset = PPPHDR_SIZE;
break;
case DLT_LOOP:
case DLT_NULL:
link_offset = LOOPHDR_SIZE;
break;
case DLT_RAW:
link_offset = RAWHDR_SIZE;
break;
case DLT_LINUX_SLL:
link_offset = ISDNHDR_SIZE;
break;
case DLT_IEEE802_11:
link_offset = IEEE80211HDR_SIZE;
break;
default:
LERR( "fatal: unsupported interface type %u\n", pcap_datalink(sniffer_rtp));
exit(-1);
}
while (pcap_loop(sniffer_rtp, 0, (pcap_handler)rtcpback_proto, 0));
/* terminate from here */
handler(1);
return NULL;
}
示例15: ReceivePcapThreadInit
/**
* \brief Init function for ReceivePcap.
*
* This is a setup function for recieving packets
* via libpcap. There are two versions of this function
* depending on the major version of libpcap used.
* For versions prior to 1.x we use open_pcap_live,
* for versions 1.x and greater we use pcap_create + pcap_activate.
*
* \param tv pointer to ThreadVars
* \param initdata pointer to the interface passed from the user
* \param data pointer gets populated with PcapThreadVars
*
* \todo Create a general pcap setup function.
*/
TmEcode ReceivePcapThreadInit(ThreadVars *tv, const void *initdata, void **data)
{
SCEnter();
PcapIfaceConfig *pcapconfig = (PcapIfaceConfig *)initdata;
if (initdata == NULL) {
SCLogError(SC_ERR_INVALID_ARGUMENT, "initdata == NULL");
SCReturnInt(TM_ECODE_FAILED);
}
PcapThreadVars *ptv = SCMalloc(sizeof(PcapThreadVars));
if (unlikely(ptv == NULL)) {
pcapconfig->DerefFunc(pcapconfig);
SCReturnInt(TM_ECODE_FAILED);
}
memset(ptv, 0, sizeof(PcapThreadVars));
ptv->tv = tv;
ptv->livedev = LiveGetDevice(pcapconfig->iface);
if (ptv->livedev == NULL) {
SCLogError(SC_ERR_INVALID_VALUE, "Unable to find Live device");
SCFree(ptv);
SCReturnInt(TM_ECODE_FAILED);
}
SCLogInfo("using interface %s", (char *)pcapconfig->iface);
if (LiveGetOffload() == 0) {
(void)GetIfaceOffloading((char *)pcapconfig->iface, 1, 1);
} else {
DisableIfaceOffloading(ptv->livedev, 1, 1);
}
ptv->checksum_mode = pcapconfig->checksum_mode;
if (ptv->checksum_mode == CHECKSUM_VALIDATION_AUTO) {
SCLogInfo("Running in 'auto' checksum mode. Detection of interface state will require "
xstr(CHECKSUM_SAMPLE_COUNT) " packets.");
}
/* XXX create a general pcap setup function */
char errbuf[PCAP_ERRBUF_SIZE];
ptv->pcap_handle = pcap_create((char *)pcapconfig->iface, errbuf);
if (ptv->pcap_handle == NULL) {
if (strlen(errbuf)) {
SCLogError(SC_ERR_PCAP_CREATE, "Couldn't create a new pcap handler for %s, error %s",
(char *)pcapconfig->iface, errbuf);
} else {
SCLogError(SC_ERR_PCAP_CREATE, "Couldn't create a new pcap handler for %s",
(char *)pcapconfig->iface);
}
SCFree(ptv);
pcapconfig->DerefFunc(pcapconfig);
SCReturnInt(TM_ECODE_FAILED);
}
if (pcapconfig->snaplen == 0) {
/* We set snaplen if we can get the MTU */
ptv->pcap_snaplen = GetIfaceMaxPacketSize(pcapconfig->iface);
} else {
ptv->pcap_snaplen = pcapconfig->snaplen;
}
if (ptv->pcap_snaplen > 0) {
/* set Snaplen. Must be called before pcap_activate */
int pcap_set_snaplen_r = pcap_set_snaplen(ptv->pcap_handle, ptv->pcap_snaplen);
if (pcap_set_snaplen_r != 0) {
SCLogError(SC_ERR_PCAP_SET_SNAPLEN, "Couldn't set snaplen, error: %s", pcap_geterr(ptv->pcap_handle));
SCFree(ptv);
pcapconfig->DerefFunc(pcapconfig);
SCReturnInt(TM_ECODE_FAILED);
}
SCLogInfo("Set snaplen to %d for '%s'", ptv->pcap_snaplen,
pcapconfig->iface);
}
/* set Promisc, and Timeout. Must be called before pcap_activate */
int pcap_set_promisc_r = pcap_set_promisc(ptv->pcap_handle, pcapconfig->promisc);
//printf("ReceivePcapThreadInit: pcap_set_promisc(%p) returned %" PRId32 "\n", ptv->pcap_handle, pcap_set_promisc_r);
if (pcap_set_promisc_r != 0) {
SCLogError(SC_ERR_PCAP_SET_PROMISC, "Couldn't set promisc mode, error %s", pcap_geterr(ptv->pcap_handle));
SCFree(ptv);
pcapconfig->DerefFunc(pcapconfig);
SCReturnInt(TM_ECODE_FAILED);
}
//.........这里部分代码省略.........