论坛: 编程破解 标题: 一段C语言的问题达人进来看看吧 复制本贴地址    
作者: minttt [minttt]    论坛用户   登录
这是LIBPCAP的主控模块PCAP.C的源代码

#ifndef lint
static const char rcsid[] =
    "@(#) $Header: pcap.c,v 1.29 98/07/12 13:15:39 leres Exp $ (LBL)";
#endif

#include <sys/types.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#include "gnuc.h"
#ifdef HAVE_OS_PROTO_H
#include "os-proto.h"
#endif

#include "pcap-int.h"

int
pcap_dispatch(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
{

if (p->sf.rfile != NULL)
return (pcap_offline_read(p, cnt, callback, user));
return (pcap_read(p, cnt, callback, user));
}

int
pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
{
register int n;

for (;;) {
if (p->sf.rfile != NULL)
n = pcap_offline_read(p, cnt, callback, user);
else {
/*
 * XXX keep reading until we get something
 * (or an error occurs)
 */
do {
n = pcap_read(p, cnt, callback, user);
} while (n == 0);
}
if (n <= 0)
return (n);
if (cnt > 0) {
cnt -= n;
if (cnt <= 0)
return (0);
}
}
}

struct singleton {
struct pcap_pkthdr *hdr;
const u_char *pkt;
};


static void
pcap_oneshot(u_char *userData, const struct pcap_pkthdr *h, const u_char *pkt)
{
struct singleton *sp = (struct singleton *)userData;
*sp->hdr = *h;
sp->pkt = pkt;
}

const u_char *
pcap_next(pcap_t *p, struct pcap_pkthdr *h)
{
struct singleton s;

s.hdr = h;
if (pcap_dispatch(p, 1, pcap_oneshot, (u_char*)&s) <= 0)
return (0);
return (s.pkt);
}

int
pcap_datalink(pcap_t *p)
{
return (p->linktype);
}

int
pcap_snapshot(pcap_t *p)
{
return (p->snapshot);
}

int
pcap_is_swapped(pcap_t *p)
{
return (p->sf.swapped);
}

int
pcap_major_version(pcap_t *p)
{
return (p->sf.version_major);
}

int
pcap_minor_version(pcap_t *p)
{
return (p->sf.version_minor);
}

FILE *
pcap_file(pcap_t *p)
{
return (p->sf.rfile);
}

int
pcap_fileno(pcap_t *p)
{
return (p->fd);
}

void
pcap_perror(pcap_t *p, char *prefix)
{
fprintf(stderr, "%s: %s\n", prefix, p->errbuf);
}

char *
pcap_geterr(pcap_t *p)
{
return (p->errbuf);
}

/*
 * Not all systems have strerror().
 */
char *
pcap_strerror(int errnum)
{
#ifdef HAVE_STRERROR
return (strerror(errnum));
#else
extern int sys_nerr;
extern const char *const sys_errlist[];
static char ebuf[20];

if ((unsigned int)errnum < sys_nerr)
return ((char *)sys_errlist[errnum]);
(void)sprintf(ebuf, "Unknown error: %d", errnum);
return(ebuf);
#endif
}

void
pcap_close(pcap_t *p)
{
/*XXX*/
if (p->fd >= 0)
close(p->fd);
if (p->sf.rfile != NULL) {
(void)fclose(p->sf.rfile);
if (p->sf.base != NULL)
free(p->sf.base);
} else if (p->buffer != NULL)
free(p->buffer);
#ifdef linux
if (p->md.device != NULL)
free(p->md.device);
#endif

free(p);
}




这是源代码   
问题:
1.MAIN函数在哪里啊?

2.#ifdef HAVE_OS_PROTO_H
  #include "os-proto.h"
  #endif
  这几行是什么意思啊?

3.这里面有好多参数都煤油定义,为什么??



地主 发表时间: 04/25 17:53

回复: max_ax [max_ax]   论坛用户   登录
完了吗
你确信吗?


B1层 发表时间: 04/25 18:11

回复: minttt [minttt]   论坛用户   登录
这个肯定是完了

B2层 发表时间: 04/25 22:16

回复: neaes [near]   论坛用户   登录
你是在哪找到的代码?


B3层 发表时间: 04/27 10:28

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号