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())
}