wincap 捕获本地 DNS 查询包并输出其IP,PORT,DOMAIN(完整版,附程序)

这几天在实验室敲了几天代码,开始一直不知道怎么捕获DNS包,参考了许多的资料,终于弄明白了,现在和还不明白的朋友分享一下。。。

1.关于适配器那一块就跳过了,网上程序写的很清楚。

2.如何获得IP?port?

这个很简单,只需要把指针定义到IP首部,根据IP头部的结构输出相应的源和目的IP,PORT即可。

3.如何捕获DNS查询包?

这个对像我一样开始学的菜鸟比较头疼,其实很简单的额,打开wireshark,用它来分析。对wireshark捕获的包进行过滤(DNS过滤),你会发现所有DNS数据包的端口号都是53,那么DNS包找到了,查询包呢?很简单,查询包源IP和本地IP肯定是一样的喽!这下通过以上俩点就可以在程序里过滤得到查询包了。

4.如何获得域名?

这个和IP,port获取类似,了解DNS包结构(很重要,不然没法整),发现域名在查询数据包的第3部分,定义指针到DNS那个部分就可以了,因为最后有'/0',所以你懂得。。。


本人超级菜鸟,如有错误,欢迎指正,谢谢!

程序如下:

#include "pcap.h" 
#include <string.h>//memcpy()所需头文件
#include "remote-ext.h" 
#include <stdio.h>
//包含SQLite3头文件
#include "sqlite3.h"
//连接sqlite3库文件
#pragma comment(lib,"sqlite3.lib")
#define DNSPORT 53
/* 4字节的IP地址 */ 
typedef struct ip_address{ 
	u_char byte1; 
	u_char byte2; 
	u_char byte3; 
	u_char byte4; 
}ip_address; 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我可以为您提供一些基本的指导。首先,Winpcap是一个开源库,允许开发人员捕获和发送网络数据包。以下是一些基本步骤: 1. 下载和安装 Winpcap 库。 2. 创建一个 C/C++ 程序,并链接 Winpcap 库。 3. 使用 `pcap_open_live()` 函数打开一个网络接口,以开始捕获数据包。 4. 使用 `pcap_loop()` 函数捕获数据包,该函数会一直循环运行,直到您停止它。 5. 对捕获的每个数据包进行分析和处理。可以使用 Wireshark 等工具来查看数据包,并确定您需要分析的协议和字段。 以下是一个简单的示例程序,它可以打开一个网络接口,捕获数据包,并打印出每个数据包的源和目的 IP 地址: ```c #include <pcap.h> #include <stdio.h> void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data); int main() { pcap_t *adhandle; char errbuf[PCAP_ERRBUF_SIZE]; struct pcap_pkthdr header; const u_char *pkt_data; // Open the network interface if ((adhandle = pcap_open_live("eth0", 65536, 1, 1000, errbuf)) == NULL) { fprintf(stderr, "\nUnable to open the adapter. %s is not supported by WinPcap\n", "eth0"); return 1; } // Start capturing packets pcap_loop(adhandle, 0, packet_handler, NULL); return 0; } void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) { printf("Source IP: %d.%d.%d.%d\n", pkt_data[26], pkt_data[27], pkt_data[28], pkt_data[29]); printf("Destination IP: %d.%d.%d.%d\n", pkt_data[30], pkt_data[31], pkt_data[32], pkt_data[33]); } ``` 请注意,此示例程序捕获并打印源和目的 IP 地址,您需要根据您的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值