golang-nmap 使用案例

package main

import (
“fmt”
“github.com/Ullaakut/nmap/v2”
“os”
“time”
)

func main() {
// 设置扫描文件路径
fileName := fmt.Sprintf(“/tmp/nmap-scan-results-%s.xml”, time.Now().Format(“20060102_150405”))

// 添加扫描选项
targets := "192.168.2.0" // 替换为你的目标地址

scanner, _ := nmap.NewScanner()
if scanner == nil {
	fmt.Println(111)
}
fileName = fmt.Sprintf("/tmp/nmap-stream-test/scan_results-%s.xml", time.Now().Format("20060102_150405"))
scanner.AddOptions(nmap.WithTargets(targets))
scanner.AddOptions(nmap.WithUDPScan())       //开启udp
scanner.AddOptions(nmap.WithConnectScan())   //开启tcp
scanner.AddOptions(nmap.WithPorts("1-1000")) // 要扫描的端口范围,包含 TCP 和 UDP

// 执行扫描
fmt.Println("开始扫描:", time.Now().String())
result, warnings, err := scanner.Run()
// 输出警告信息(如果有)
if len(warnings) > 0 {
	fmt.Println("警告信息:")
	for _, warning := range warnings {
		fmt.Println(warning)
	}
}

if err != nil {
	fmt.Printf("扫描失败: %v\n", err)
	return
}
// 输出扫描结果
for _, host := range result.Hosts {
	if len(host.Addresses) == 0 {
		continue
	}

	fmt.Printf("主机 %s\n", host.Addresses[0])

	for _, port := range host.Ports {
		fmt.Printf("  端口 %d/%s 状态: %s\n", port.ID, port.Protocol, port.State)
	}
}
// 打印扫描结果
//fmt.Println("扫描结果:", result)

// 检查 XML 文件是否生成
if _, err := os.Stat(fileName); os.IsNotExist(err) {
	fmt.Printf("XML 文件未生成\n")
} else {
	fmt.Printf("扫描结果已保存为 XML 文件: %s\n", fileName)
}

fmt.Println("扫描结束:", time.Now().String())

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值