|

分享源码
界面截图: |
|
是否带模块: |
纯源码 |
备注说明: |
- |
刚开始学go语言,不知道写点什么小工具练练手,就随便写了个sync端口快速扫描的代码,貌似易语言想使用sync快速扫描端口还挺麻烦的。
1.核心代码用的go语言写的,编译成DLL,供易语言调用。
2.传入的结果和传出的结果都是文本型,需要自行处理。
3.必须提供一个端口号,用于能否sync建立连接,如果不能的话,则代表该主机不能存活。
别的也没啥多说的,没啥用,就个sync快速,可以用来快速检测局域网存活主机。 自测1秒扫254个IP地址。
请不要拿去做不好的事,sync扫描可以用来快速做快速检测局域网主机或者局域网内运行多个软件,多个软件之间快速检测(例如飞秋,飞鸽传书之类的,局域网内有多少个本软件在运行)。
变量名 | 类 型 | 静态 | 数组 | 备 注 | 扫描结果文本 | 文本型 | | | 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() {
}
sync.zip
(1.54 MB, 下载次数: 41)
|
评分
-
参与人数 3 | 好评 +1 |
精币 +2 |
收起
理由
|
財財
| |
+ 1 |
感谢分享,很给力!~ |
AK48
| + 1 |
|
C.CString后要自己在合适的时候释放内存,不然会内存泄漏~ |
多多帅吧
| |
+ 1 |
很赞同,谢谢! |
查看全部评分
|