一、背景

写这个脚本出于两个背景。一个是昨天一个兄弟说有一个客户网络有地址冲突,而且ping网关延迟在600ms;另外一个是俺本身是搞网络的,老是看海南弱电小胡等一众网络大咖现场排查网络问题,对于其中的问题排查过程非常着迷。基于此,是否可以有一些检测手段,可以辅助或者加快网络问题定位呢。借助Caude3-oups以及刚出的GPT-4o开始了本次实践。

二、程序介绍

(1)需求整理

用go写一个程序,根据arp收到的src和mac地址,分析判断地址冲突问题,且具有详细日志信息,并有开关控制日志是否显示。程序适用于linux、windows、osx、arm等系统,程序运行后,根据当前系统的上网网卡进行抓包分析。程序运行过程中,对于接收到的每一个ARP包,打印IP地址和MAC地址。如果接收到的IP或者MAC地址与之前接收到的有重复,则在打印IP和MAC的基础上,追加红色信息,说明冲突,比如是ip地址冲突还是mac地址冲突。

(2)完善优化

(1)实现了抓包
直接使用GPT-4o写出来的程序,各种编译不通过。最后还是切换到Claude3-oups模型才得以拿到第一个版本。实现了抓包输出以及(2)实现了主要功能
MAC地址IP地址冲突
(3)实现了日志写到文件
实现了将异常信息除了打印在终端,还写入到程序相同目录下的log.txt里面。
(4)完善输出换行
由于Windows下面的换行是\r\n,因此进行了\n的优化。
(5)过滤ARP中的流氓
过滤了ARP数据包中的0.0.0.0。这类包以前也没有见过,但是确实有,还不少。有网友说是Win发出的避免IP地址冲突的包
还有更专业的https://cloud.tencent.com/developer/ask/sof/116097845

(3)程序成型

这个Go程序是一个简单的网络数据包捕获和分析工具,它使用了github.com/google/gopacket库来处理网络数据包。程序的主要功能是监听指定的网络接口,捕获ARP数据包,并检测是否有IP地址或MAC地址冲突。

  • 程序首先会列出所有可用的网络接口供用户选择,并要求用户选择一个接口进行数据包捕获。
  • 通过调用pcap.OpenLive方法打开选定的网络接口并设置过滤器,只捕获ARP数据包。
  • 数据包捕获后会将来源IP地址和MAC地址提取出来,并检查是否有冲突。
  • 如果发现冲突,程序会输出相应的冲突信息,并记录到日志文件中。

三、运行效果

2024-05-15T09:15:14.png

四、总结

想写这种程序很长时间了,可能因为平常自己手头工作用的不多,而身边发生的案例也不多,所以突然在有这种需求以及长期看网络大咖视频熏陶的情况下,就有了这么个程序。

最后也放到了github

最后修改:2024 年 06 月 05 日
如果觉得我的文章对你有用,请随意赞赏