Skip to content

zzlyzq/arp_conflict_detector

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

背景

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

程序介绍

需求整理

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

完善优化

实现了抓包。直接使用GPT-4o写出来的程序,各种编译不通过。最后还是切换到Claude3-oups模型才得以拿到第一个版本。实现了抓包输出以及MAC地址IP地址冲突。 实现了日志。实现了将异常信息除了打印在终端,还写入到程序相同目录下的log.txt里面。 完善输出换行。由于Windows下面的换行是\r\n,因此进行了\n的优化。

程序成型

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

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

运行效果

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

总结

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

About

探测局域网IP地址冲突

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages