-
Notifications
You must be signed in to change notification settings - Fork 125
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
用Go开发可以内网活跃主机嗅探器 #1
Comments
谢谢分享. |
@terryzwt 直接 go build main && sudo ./main 就可以了 |
还得翻墙下载依赖包 |
虚拟机里只能扫到自己,局域网其他主机扫不了 |
虚机用的桥接吧,桥接的虚二层网络隔绝了vlan,所以arp出不去,可以改成host试试看 |
补充,如果Linux上安装报错 : fatal error: pcap.h: No such file or directory 说明需要安装libpcap程序 |
MAC上,go build无报错. './main' terminated by signal SIGKILL (Forced quit) |
你好,我想请问下win环境下怎么运行?github.com\google\gopacket\pcap_obj\pcap.cgo2.o: In function |
你好,win环境下,如下问题怎么解决,谢谢 |
@chenDONG9 目前没有windows测试环境,另外你这个乱码也看不懂,你已经排除是权限的问题了吗? |
楼主请教个问题: 找到解决办法: |
解决了吗老哥 |
time="2019-10-12T15:30:44+08:00" level=info msg="本机ip:192.168.1.30" 同样错误 win10 管理员权限 |
@AmarsDing 不好意思朋友,没有windows 的测试机。暂没有对支持windows的计划。 |
用Go开发可以内网活跃主机嗅探器
文章关键词
程序截图
说明
本文对于Go语言本身的讲解不会太多,想把更多的时间花在几个网络协议的讲解上,希望本文对打算或正在用Go进行TCP/IP编程和抓包的朋友带来帮助。
github地址:https://github.com/timest/goscan
程序思路
通过内网IP和子网掩码计算出内网IP范围
如果仅仅只是知道一个IP地址,是无法得知内网IP的网段,不能只是简单的把本机IP的最后一个字节改成1-255。需要通过子网掩码来计算得出内网的网段,这块比较简单,这里不赘述了,有疑问的网上搜索子网掩码获取更多资料。值得一提的是IP地址的最后一个字段是不能为0和255,前者是RFC规定,后者一般是广播地址。
根据上面得到的IPNet,可以算出内网IP范围:
向内网广播ARP Request
当我们要向以太网中另一台主机发送IP数据时,我们本地会根据目的主机的IP地址在ARP高速缓存中查询相应的以太网地址,ARP高速缓存是主机维护的一个IP地址到相应以太网地址的映射表。如果查询失败,ARP会广播一个询问(op字段为1)目的主机硬件地址的报文,等待目标主机的响应。
因为ARP高速缓存有时效性,读取到目标主机的硬件地址后,最好发送一个ICMP包验证目标是否在线。当然也可以选择不从高速缓存里读取数据,而是直接并发发送arp包,等待在线主机回应ARP报文。
gopacket有封装好的ARP报文:
给出项目中具体的代码:
我们只需要将第一步得到的内网IP表,开启一个goruntime遍历发送arp报文就可以。
监听并抓取ARP Response包,记录IP和Mac地址
在上一步已经发送了arp请求,只需要开启一个arp的监听goruntime,所有有返回arp response包的,就是内网在线的host。
发活跃IP发送MDNS和NBNS包,并监听和解析hostname
在上一步的过程中,我们在接受到一个arp的response后,就可以发起mdns和nbns包等待hostname的返回。
mDNS:往对方的5353端口和01:00:5E:00:00:FB的mac地址发送UDP的mdns(Multicast DNS)包,如果目标系统支持,回返回host name。详细协议介绍和报文格式可以查看维基百科的介绍。
NBNS:也是一个种常见的查看目标机器hostname的一种协议,和mDNS一样,传输层也是UDP,端口是在137。
篇幅太长了,具体的代码请看github上的nbns.go 和 mdns.go。
根据Mac地址计算出厂家信息
我们可以通过目标主机的硬件地址,获取到设备的生产厂家信息。这样的话,即使遇到防御比较好的系统,我们无法获取到hostname,也能从厂家信息里获取一定的信息量,比如厂家信息是oneplus或则Smartisan,就可以判断是手机了
manuf文件,文件片段:
代码不贴了,直接看代码,100行不到的代码,还是挺简单的:manuf.go。测试结果99%的mac地址都能映射到相应的厂商信息。
The text was updated successfully, but these errors were encountered: