全部程序均可在 Windows 下正常运行,部分程序需要加入 -lpthread
参数编译。
代码托管在 https://git.coding.net/rexskz/network_design.git 中。
必须使用管理员权限运行才可以获取到数据。
先定义 IP 包格式、TCP 包格式、UDP 包格式,这样可以直接接收相关类型的变量的二进制信息,无需手动解析数据。
在主程序中先获取本机网卡的信息,然后对于获取到的每个 IP,建立一个线程执行 Sniffer(IP)
函数。然后由于本机网卡信息中没有 127.0.0.1
,因此在循环外面添加了对于 127.0.0.1
的 Sniffer。
在 Sniffer
函数中,先建立 socket,绑定 IP 地址,然后设置为混杂模式,通过这个 socket 接收一个 char 数组,然后直接将其指针类型转换为 IP 包类型的指针,然后将其协议、源 IP、目标 IP、包大小、源端口、目标端口输出。