如何从此DNS消息中提取域名?

时间:2015-12-02 08:01:12

标签: dns tcpdump packet-capture netfilter

当使用another_callback函数()时,sniff包的示例代码为http://opensourceforu.efytimes.com/2011/02/capturing-packets-c-program-libpcap,类型为:

[root@localhost tcpsnip]# ./sniffer udp

Packet Count: 1
Recieved Packet Size: 76
Payload:
.  .  .  .  .  .  .  . )  .  . /  .  . E  .  . 
> : g @  . @  .  .  .  .  .  .  .  .  .  . 
.  .  .  . 5  . *  .  . C  .  .  .  .  .  . 
.  .  .  .  .  . w w w  . f a c e b o 
o k  . c o m  .  .  .  .  . 
Packet Count: 2
Recieved Packet Size: 76
Payload:
.  .  .  .  .  .  .  . )  .  . /  .  . E  .  . 
> : h @  . @  .  .  .  .  .  .  .  .  .  . 
.  .  .  . 5  . *  .  .  .  .  .  .  .  .  . 
.  .  .  .  .  . w w w  . f a c e b o 
o k  . c o m  .  .  .  .  . 

在这里,我如何从所有这些数据包(c语言)中提取域名(www.facebook.com)。提前谢谢你。

1 个答案:

答案 0 :(得分:2)

通过编写代码来解析您拥有的任何链路层协议(使用pcap_datalink()找出链路层标头格式值;请参阅the "Link-Layer Header Types" page了解它们的含义),IPv4IPv6UDPDNS

或者忘记用C语言编写并使用Scapy代替。 捕获数据包相对容易; 解析数据包很难,这就是为什么tcpdump有大约750行代码,而Wireshark有大约5700行代码,只是为了解析DNS(它不会计算要解析的代码行数) DNS下的所有协议)。编写解析数据包的代码是一项重要的工作;使用别人的代码是很少的工作。