当前位置: 技术问答>linux和unix
求助,LINUX下网络IP问题
来源: 互联网 发布时间:2016-04-10
本文导语: 请问在LINUX下在查找到IP HEADER后如何查找IP地址里的PROTOCOL,SOURSE ADDRESS和DESTINE ADDRESS?如果查找成功知道当前使用的是什么协议后(TCP或UDP),如何查找下一层的头文件。请高手解答,高分相送。 | ...
请问在LINUX下在查找到IP HEADER后如何查找IP地址里的PROTOCOL,SOURSE ADDRESS和DESTINE ADDRESS?如果查找成功知道当前使用的是什么协议后(TCP或UDP),如何查找下一层的头文件。请高手解答,高分相送。
|
在linux/ip.h中定义了ip头的格式,
比如一个char *类型的buffer中是一个ip packet,
struct iphdr *ipheader = (struct iphdr *)buffer得到指向ip报文首地址的指针
ipheader->protocol是该ip数据包的协议类型,比如icmp tcp udp 等
ipheader->saddr是源节点地址;
ipheader->daddr是目的节点地址;
tcp udp的头结构分别定义在linux/tcp.h 和linux/udp.h中,
如果是tcp,那么
struct tcphdr *tch = (struct tcphdr *)(ipheader+1);
同理也可得到指向udp头的指针。
比如一个char *类型的buffer中是一个ip packet,
struct iphdr *ipheader = (struct iphdr *)buffer得到指向ip报文首地址的指针
ipheader->protocol是该ip数据包的协议类型,比如icmp tcp udp 等
ipheader->saddr是源节点地址;
ipheader->daddr是目的节点地址;
tcp udp的头结构分别定义在linux/tcp.h 和linux/udp.h中,
如果是tcp,那么
struct tcphdr *tch = (struct tcphdr *)(ipheader+1);
同理也可得到指向udp头的指针。