C++调试——winpcap发送UDP包
(2012-06-12 15:00:33)
标签:
c调试winpcapudp数据包 |
分类: C++调试开发 |
今天尝试用winpcap提供的pcap_sendpacket函数成功发送一个udp数据包到目的地址。下面就来回顾一下过程。
首先用pcap_findalldevs得到网络接口,比如在我的机器上得到这样的结果:
1: /Device/NPF_GenericDialupAdapter
2: /Device/NPF_{06864041-9387-44DC-AF44-37779B0F2E9E}
现在我们及应用"/Device/NPF_{06864041-9387-44DC-AF44-37779B0F2E9E}“对应的接口发送数据。
由于发送数据必须自己构建以太网数据头, IP数据包头 和 UDP数据包头, 数据结构大概是这个样子的。
"
以太网数据头结构如下,
struct
};
以太网地址填充什么数据, 我不是很清楚, 你可以填上实际的地址, 我这里全部填1.
IP数据头
struct ip_header
{
};
tot_len为 整个IP数据包长度 (IP数据头 | UDP数据包头 | 数据)
ihl 为IP数据头的总长度 除以4.
check 为在数据填好后, check为0 时的校验和, 是对于IP数据头。
protocol 为IPPROTO_UDP。
UDP数据包头
struct udphdr
{
};
len 为UDP数据包长度,
checkl
struct Psd_Header {
};
plen 和UDP长度是一样的。
当把这些都填充好了, 就可以用pcap_sendpacket发送出去了

加载中…