//系统和本机信息===>#include<sys/utsname.h>
struct utsname
{
char sysname[_UTSNAME_SYSNAME_LENGTH];//当前操作系统名
char nodename[_UTSNAME_NODENAME_LENGTH];//网络上的名称
char release[_UTSNAME_RELEASE_LENGTH];//当前发布级别
char version[_UTSNAME_VERSION_LENGTH];//当前发布版本
char machine[_UTSNAME_MACHINE_LENGTH];//当前硬件体系类型
};
int getopt(int argc,char * const argv[ ],const char * optstring);
getopt()用来分析命令行参数。参数argc和argv是由main()传递的参数个数和内容。参数optstring 则代表欲处理的选项字符串。此函数会返回在argv中下一个的选项字母,此字母会对应参数optstring 中的字母。如果选项字符串里的字母后接着冒号“:”,则表示还有相关的参数,全域变量optarg 即会指向此额外参数。如果getopt()找不到符合的参数,则会打印出错信息,并将全域变量optarg设为“?”字符,如果不希望getopt()打印出错信息,则只要将全域变量opterr设为0即可。
流程:
基础信息:
//
参数设定:
-h: ---help
-i: ---打印本机info
-t: ---抓包数量
-f: ---设定过滤规则
开始捕获数据:
ARP报文是由以太网帧进行封装传输的。没有封装进IP包。实际上,对网络接口层的以太网帧来讲,它们同样是帧的上层协议,当收到以太帧时,根据帧的协议字段判断是送到ARP还是IP。
ICMP//TCP//UDP等由IP封装;
一、以太网封装格式:
目的地址6 + 源地址6 + 类型2 + 46~1500数据 + CRC校验4
偏移12 ==> 数据包类型
二、ARP(0806):地址解析协议
在TCP/IP协议簇中属于网络层
三、IP(0800)网际层协议
首部中:协议
ICMP(Internet Control Message Protocol)——网际控制报文协议——– 1
IGMP(Internet Group Management Protocol) ——网际组管理协议——-2
TCP(Transmission Control Protocol ) ————–传输控制协议———- 6
UDP(User Datagram Protocol) ———————用户数据报协议——- 17
四、传输层协议
4.1 TCP==>传输控制协议
4.2 udp==>用户数据报协议
icmp协议分析信息: