日服lol怎么注册:一个基于Winpcap的sniffer程序,大家帮忙看下,谢谢!

来源:百度文库 编辑:高校问答 时间:2024/05/02 09:49:45
下面是程序的功能是分析所截获数据的2,3,4层数据结构,显示各字段。在VC++下编译通过,但运行没任何输出,麻烦大家看下问题在哪里,不胜感激!!
#include "pcap.h"
/*以下是以太网格式的定义*/
struct ether_header
{
u_int8_t ether_dhost[6];
u_int8_t ether_shost[6];
u_int16_t ether_type;
};
/*以下是ARP TCP ICMP UDPIIP协议格式的定义*/
struct arp_header{省略...};
/*下面是分析以太网协议的函数,其定义方式与回调函数相同*/
void ethernet_protocol_packet_callback(u_char *argument,
const struct pcap_pkthdr* packet_header,
const u_char* packet_content)
{
u_short ethernet_type;
struct ether_header *ethernet_protocol;
u_char *mac_string;
static int packet_number=1;
printf("***************************************************\n");
printf("捕获第%d个网络数据包\n",packet_number);
省略…

}
/*主函数*/
void main()
{
pcap_t* pcap_handle; //Winpcap句柄
char error_content[PCAP_ERRBUF_SIZE]; //存储错误信息
char *net_interface; //网络接口
struct bpf_program bpf_filter; //BPF过滤规则
char bpf_filter_string[]=""; //过滤规则字符串
bpf_u_int32 net_mask; //掩码
bpf_u_int32 net_ip; //网络地址
net_interface=pcap_lookupdev(error_content); //获得可用网络接口
pcap_lookupnet(net_interface,
&net_ip,
&net_mask,
error_content); //获得网络地址和掩码地址
pcap_handle=pcap_open_live(net_interface,
BUFSIZ,
1,
1,
error_content); //打开网络接口
pcap_compile(pcap_handle,
&bpf_filter,
bpf_filter_string,
0,
net_ip); //编译BPF过滤规则
pcap_setfilter(pcap_handle,&bpf_filter); //设置过滤规则
if(pcap_datalink(pcap_handle)!=DLT_EN10MB)
return;
pcap_loop(pcap_handle,
-1,
ethernet_protocol_packet_callback,
NULL); //注册回调函数,循环捕获网络数据包,利用回调函数来处理每个数据包
pcap_close(pcap_handle);
}

你的程序是捕获数据库
如果你的机器没有发送发送数据包它当然没有反应了
你可以用其它的捕获数据包的软件
比如ethereal等同时捕获你机器上数据包
注意设置,光看你的程序能捕获的就行了
这个程序以前我写过
应该不会有什么问题

你的程序是捕获数据库
如果你的机器没有发送发送数据包它当然没有反应了
你可以用其它的捕获数据包的软件
比如ethereal等同时捕获你机器上数据包
注意设置,光看你的程序能捕获的就行了
这个程序以前我写过
应该不会有什么问题

函数pcap_handle=pcap_open_live(net_interface,1000,1,1000,error_content); 已经将网卡设置为混杂模式了啊?它可以截获流经网卡的所有数据包,上面的大哥如果懂的话加下我qq 157817659 谢谢!

arp命令详解

1.具体功能
该命令用于显示和修改“地址解析协议(ARP)”缓存中的项目。ARP缓存中包含一个或多个表,它们用于存储IP地址及其经过解析的以太网或令牌环物理地址。计算机上安装的每一个以太网或令牌环网络适配器都有自己单独的表。如果在没有参数的情况下使用,则ARP命令将显示帮助信息。
2.语法详解
arp [-a [inetaddr] [-n ifaceaddr] [-g [inetaddr] [-n ifaceaddr] [-d
inetaddr [ifaceaddr] [-s inetaddr etheraddr [ifaceaddr]
3.参数说明
-a [inetaddr] [-n ifaceaddr]
显示所有接口的当前ARP缓存表。要显示指定IP地址的ARP缓存项,请使用带有inetaddr参数的“arp
-a”,此处的inetaddr代表指定的IP地址。要显示指定接口的ARP缓存表,请使用“-n
ifaceaddr”参数,此处的ifaceaddr代表分配给指定接口的IP地址。-N参数区分大小写。
-g [inetaddr] [-n ifaceaddr] 与-a相同。
-d inetaddr [ifaceaddr]
删除指定的IP地址项,此处的inetaddr代表IP地址。对于指定的接口,要删除表中的某项,请使用ifaceaddr参数,此处的ifaceaddr代表分配给该接口的IP地址。要删除所有项,请使用星号(*)通配符代替inetaddr。

-s inetaddr etheraddr [ifaceaddr]
向ARP缓存添加可将IP地址inetaddr解析成物理地址etheraddr的静态项。要向指定接口的表添加静态ARP缓存项,请使用ifaceaddr参数,此处的ifaceaddr代表分配给该接口的IP地址。

注意:inetaddr和ifaceaddr的IP地址用带圆点的十进制记数法表示。物理地址Etheraddr由六个字节组成,这些字节用十六进制记数法表示并且用连字符隔开(比如,00-AA-00-4F-2A-9C)。

只有当TCP/IP协议在网络连接中安装为网络适配器属性的组件时,该命令才可用。
4.例举说明
例子1:要显示所有接口的ARP缓存表,执行以下命令:
arp -a
例子2:对于指派的IP地址为10.0.0.99的接口,要显示其ARP缓存表,执行以下命令:
arp -a -N 10.0.0.99
例子3:要添加将IP地址10.0.0.80解析成物理地址00-AA-00-4F-2A-9C的静态ARP缓存项,执行以下命令:
arp -s 10.0.0.80 00-AA-00-4F-2A-9C