吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 439|回复: 0
收起左侧

[学习记录] Go语言实现的一个简单的域名扫描工具

[复制链接]
kengengping 发表于 2023-11-24 10:53
[Golang] 纯文本查看 复制代码
package main

import (
	"fmt"
	"net"
	"sync"
)

// 定义一个全局变量用于存储开放的端口
var openPorts []int

// 定义一个互斥锁用于保护共享资源
var mutex sync.Mutex

// scanPort 函数用于扫描指定IP和端口是否开放
func scanPort(ip string, port int) {
	conn, err := net.DialTimeout("tcp", ip+":"+fmt.Sprint(port), time.Second*5)
	if err == nil {
		mutex.Lock()
		openPorts = append(openPorts, port)
		mutex.Unlock()
		conn.Close()
	}
}

// main 函数用于启动多线程扫描
func main() {
	// 目标域名
	domain := "example.com"
	// 获取所有子域名
	subdomains := getSubdomains(domain)
	// 创建多个goroutine进行并发扫描
	var wg sync.WaitGroup
	for _, subdomain := range subdomains {
		wg.Add(1)
		go func(subdomain string) {
			defer wg.Done()
			ip := getIPByDomain(subdomain)
			if ip != "" {
				for port := 80; port <= 65535; port++ {
					scanPort(ip, port)
				}
			}
		}(subdomain)
	}
	wg.Wait()
	// 输出开放的端口
	fmt.Println("Open ports:", openPorts)
}

// getSubdomains 函数用于获取目标域名的所有子域名
func getSubdomains(domain string) []string {
	// 这里仅作示例,实际应用中可以使用第三方库或API获取子域名列表
	return []string{"www", "mail", "ftp"}
}

// getIPByDomain 函数用于根据域名获取对应的IP地址
func getIPByDomain(domain string) string {
	// 这里仅作示例,实际应用中可以使用第三方库或API获取IP地址
	return "192.168.1.1"
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:18

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表