• 大小: 6.79MB
    文件类型: .7z
    金币: 1
    下载: 0 次
    发布日期: 2023-10-16
  • 语言: C/C++
  • 标签:

资源简介

里面包括C语言源码,用到的各种库和安装包、实验报告等。用DEV C++开发的,详细信息可见 http://blog.csdn.net/zuzhiang/article/details/78934402

资源截图

代码片段和文件信息

#define HAVE_REMOTE
#define LINE_LEN 16
#include “winsock.h“
#include 
#include “pcap.h“

typedef struct ip_address
{ //ip地址 
    u_char b1;
    u_char b2;
    u_char b3;
    u_char b4;
} ip_address;

typedef struct mac_address
{//mac地址 
u_char b1;
u_char b2;
u_char b3;
u_char b4;
u_char b5;
u_char b6;
} mac_address;

typedef struct ethe_header
{ //mac帧首部 
mac_address mac_dest_address;
mac_address mac_source_address;
u_short ether_type;
} ethe_header;

typedef struct ip_header
{ //ip地址首部 
    u_char  ver_ihl;        // 版本 (4 bits) + 首部长度 (4 bits)
    u_char  tos;            // 服务类型(Type of service) 
    u_short tlen;           // 总长(Total length) 
    u_short identification; // 标识(Identification)
    u_short flags_fo;       // 标志位(Flags) (3 bits) + 段偏移量(Fragment offset) (13 bits)
    u_char  ttl;            // 存活时间(Time to live)
    u_char  proto;          // 协议(Protocol)
    u_short crc;            // 首部校验和(Header checksum)
    ip_address  saddr;      // 源地址(Source address)
    ip_address  daddr;      // 目的地址(Destination address)
    u_int   op_pad;         // 选项与填充(Option + Padding)
} ip_header;

typedef struct udp_header
{ //UPD首部 
    u_short sport;          // 源端口(Source port)
    u_short dport;          // 目的端口(Destination port)
    u_short len;            // UDP数据包长度(Datagram length)
    u_short crc;            // 校验和(Checksum)
} udp_header;

typedef struct tcp_header
{ //TCP首部 
u_short sport;          // 源端口(16位)
    u_short dport;          // 目的端口(16位)
    u_int num;              // 序列号 (32位) 
u_int ack;              // 确认号(32位) 
u_short sum;            // 数据偏移(4位),保留(6位),标志位(6位) 
u_short windonw;        // 窗口 (16位) 
u_short crc;            // 检验和 (16位) 
u_short ugr;            // 紧急指针(16位) 
} tcp_header;

void packet_handler(u_char * param const struct pcap_pkthdr * header const  u_char *pkt_data);

int main()
{
    pcap_if_t * alldevs *device;
int i = 0;
int iNum;
u_int netmask;
struct bpf_program fcode;
pcap_t * adhandle;
char errbuf[PCAP_ERRBUF_SIZE];
//修改这里可以更改捕获的数据包使用的协议类型 
    char packet_filter[] = “(ip and udp) or (ip and tcp) or (ip and icmp)“; 
    
if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING NULL &alldevs errbuf) == -1)
{ //获取设备列表 
fprintf(stderr“无法打开网络设备:%s\n“ errbuf);
return 1;
}
for (device = alldevs; device  != NULL; device = device->next)
{ //打印列表 
if (i == 0)
{
printf(“请按CTRL + C退出!\n\n“);
printf(“网络设备如下:\n“);
}
printf(“%d. %s\n“ ++i device -> name);
if (device->description)
printf(“ (%s)\n“ device->description);
else 
printf(“没有设备描述信息!“); 
}
if (i == 0)
{
printf(“\n请先安装WinPcap!“);
return -1;
}
printf(“请选择网络设备接口:(1 - %d):“ i);
scanf(“%d“ &iNum);
if (iNum < 1 || iNum > i)
{
printf(“设备不存在!\n“);
pcap_freealldevs(alldevs);
return -1;
}
//跳转到已选设备 
    for (device = alldevs i = 0;i < iNum -1 ; device = device -> nexti+

评论

共有 条评论