变量名 | 类 型 | 静态 | 数组 | 备 注 |
扫描结果文本 | 文本型 | | |
time1 | 整数型 | | |
time2 | 整数型 | | |
开放端口的IP地址数组 | 文本型 | | 0 |
起始IP地址 | 文本型 | | |
结束IP地址 | 文本型 | | |
扫描端口 | 文本型 | | |
如果真 (文件_是否存在 (取运行目录 () +
“\file.dll”) =
假)
写到文件 (取运行目录 () +
“\file.dll”,
#图片_file_dll )time1 = 取启动时间 ()起始IP地址 =
“192.168.10.1”结束IP地址 =
“192.168.10.254”扫描端口 =
“80”扫描结果文本 =
sm (起始IP地址, 结束IP地址, 扫描端口
) time2 =
取启动时间 ()开放端口的IP地址数组 =
分割文本 (扫描结果文本,
#换行符, )调试输出 (“扫描结束,累计耗时” +
到文本 (到整数 (time2 - time1
)) +
“ms,[” + 起始IP地址 +
“]->[” + 结束IP地址 +
“]中共有【” +
到文本 (取数组成员数 (开放端口的IP地址数组
)) +
“】个IP开放【” + 扫描端口 +
“】端口。”)调试输出 (开放端口的IP地址数组
)信息框 (“扫描结束,累计耗时” +
到文本 (到整数 (time2 - time1
)) +
“ms,[” + 起始IP地址 +
“]->[” + 结束IP地址 +
“]中共有【” +
到文本 (取数组成员数 (开放端口的IP地址数组
)) +
“】个IP开放【” + 扫描端口 +
“】端口。”, 0, ,
)返回 (0
) 返回 (PathFileExistsA (文件名
))
[Golang] 纯文本查看 复制代码
package main
import (
"C"
"fmt"
"net"
"strconv"
"strings"
"sync"
"time"
)
var port, iplist string
func ipToInt(ip string) uint32 {
parts := strings.Split(ip, ".")
var ipInt uint32 = 0
for i := 0; i < 4; i++ {
partInt, _ := strconv.Atoi(parts)
ipInt = (ipInt << 8) + uint32(partInt)
}
return ipInt
}
//export saomiao
func saomiao(startIP1, endIP1, Port1 *C.char) *C.char {
iplist = ""
var startIP, endIP string
startIP = C.GoString(startIP1)
endIP = C.GoString(endIP1)
port = C.GoString(Port1)
var wg sync.WaitGroup
startInt := ipToInt(startIP)
endInt := ipToInt(endIP)
ipRange := endInt - startInt + 1
wg.Add(int(ipRange))
for i := startInt; i <= endInt; i++ {
go func(i uint32) {
defer wg.Done()
ip := fmt.Sprintf("%d.%d.%d.%d", i>>24, (i>>16)&0xFF,
(i>>8)&0xFF, i&0xFF)
if checkIP(ip) {
iplist = iplist + ip + "\r\n"
}
}(i)
}
wg.Wait()
return C.CString(iplist)
}
func checkIP(ip string) bool {
conn, err := net.DialTimeout("tcp", fmt.Sprintf("%s:"+port, ip), time.Second)
if err != nil {
//fmt.Printf("IP %s 不可达\n", ip)
return false
}
defer conn.Close()
return true
}
func main() {
}