ICMP发包代码丢失数据代码差异分析

前言:fscan扫描器中ICMP发包代码丢失数据代码差异分析

数据丢失

func (l *LiveScanner) ICMPFirstListenAndSend(conn *icmp.PacketConn) {
ExistHosts := make(map[string]struct{})
//count := 0
endflag := false
//开启一个协程监听,conn.ReadFrom默认堵塞不需要sleep
go func() {
for {
if endflag == true {
return
}
msg := make([]byte, 100)
_, sourceIP, _ := conn.ReadFrom(msg)
if sourceIP != nil {
ip := sourceIP.String()
// 判断是否存储了存活ip,有的路由会发送外网ip,需要IsContain判断ip是否在扫描ip列表里
if _, ok := ExistHosts[sourceIP.String()]; !ok {
ExistHosts[ip] = struct{}{}
if stringsutil.IsContain(l.Hosts, ip) {
result := structs.AliveResult{
Ip: ip,
IpRange: strings.Join(strings.Split(ip, ".")[0:3], ".") + ".1/24",
Mac: "",
}
l.doDone(result)
} else {
outputter.PrintScreen.WriteResult(fmt.Sprintf("[!] 发现路由返回的外网ip: %-15s", ip))
}
}
}
}
}()
for _, host := range l.Hosts {
dst, _ := net.ResolveIPAddr("ip", host)
IcmpByte := ICMPmakemsg(host)
conn.WriteTo(IcmpByte, dst)
}
endflag = true
conn.Close()
}
func main(){
conn, err := icmp.ListenPacket("ip4:icmp", "0.0.0.0")
}

数据不丢失

func main(){
chanHosts := make(chan string, len(l.Hosts))
go func() {
for ip := range chanHosts {
if _, ok := ExistHosts[ip]; !ok {
ExistHosts[ip] = struct{}{}
if stringsutil.IsContain(l.Hosts, ip) {
result := structs.AliveResult{
Ip: ip,
IpRange: strings.Join(strings.Split(ip, ".")[0:3], ".") + ".1/24",
Mac: "",
}
l.doDone(result)
} else {
outputter.PrintScreen.WriteResult(fmt.Sprintf("[!] 发现路由返回的外网ip: %-15s", ip))
}
}
livewg.Done()
}
}()
RunIcmp1(l.Hosts, conn, chanHosts)
}
func ICMPFirstListenAndSend(hostslist []string, conn *icmp.PacketConn, chanHosts chan string) {
endflag := false
go func() {
for {
if endflag == true {
return
}
msg := make([]byte, 100)
_, sourceIP, _ := conn.ReadFrom(msg)
if sourceIP != nil {
livewg.Add(1)
chanHosts <- sourceIP.String()
}
}
}()
for _, host := range hostslist {
dst, _ := net.ResolveIPAddr("ip", host)
IcmpByte := ICMPmakemsg(host)
conn.WriteTo(IcmpByte, dst)
}
endflag = true
conn.Close()
}
posted @   zpchcbd  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
历史上的今天:
2021-06-26 关于单向认证与双向认证
点击右上角即可分享
微信分享提示