golang 获取其他机器上文件的MD5
时间: 2023-10-08 09:05:14 浏览: 103
你可以使用Go语言的net包来连接其他机器并获取文件的MD5值。以下是一个示例代码:
```go
package main
import (
"crypto/md5"
"fmt"
"io"
"net"
"os"
)
func main() {
// 远程机器的IP地址和端口号
host := "192.168.1.100"
port := "8888"
// 要获取MD5值的文件路径
path := "/path/to/file.txt"
// 连接远程机器
conn, err := net.Dial("tcp", host+":"+port)
if err != nil {
fmt.Println("Error while connecting to remote machine:", err)
return
}
defer conn.Close()
// 发送文件路径给远程机器
if _, err := conn.Write([]byte(path)); err != nil {
fmt.Println("Error while sending file path:", err)
return
}
// 接收远程机器返回的MD5值
md5sum := make([]byte, md5.Size)
if _, err := io.ReadFull(conn, md5sum); err != nil {
fmt.Println("Error while receiving MD5 sum:", err)
return
}
// 输出MD5值
fmt.Printf("MD5 of file %s on %s: %x\n", path, host, md5sum)
}
```
你需要将`host`和`port`变量替换成远程机器的IP地址和端口号,将`path`变量替换成要获取MD5值的文件的路径。然后你需要在远程机器上编写一个简单的TCP服务器程序,用于接收文件路径并计算MD5值。例如:
```go
package main
import (
"crypto/md5"
"fmt"
"io"
"net"
"os"
)
func main() {
// 监听的端口号
port := "8888"
// 监听TCP端口
listener, err := net.Listen("tcp", ":"+port)
if err != nil {
fmt.Println("Error while listening:", err)
return
}
defer listener.Close()
for {
// 等待连接
conn, err := listener.Accept()
if err != nil {
fmt.Println("Error while accepting connection:", err)
continue
}
// 接收文件路径
path := make([]byte, 1024)
n, err := conn.Read(path)
if err != nil {
fmt.Println("Error while receiving file path:", err)
continue
}
path = path[:n]
// 计算MD5值
f, err := os.Open(string(path))
if err != nil {
fmt.Println("Error while opening file:", err)
continue
}
defer f.Close()
h := md5.New()
if _, err := io.Copy(h, f); err != nil {
fmt.Println("Error while calculating MD5:", err)
continue
}
md5sum := h.Sum(nil)
// 发送MD5值
if _, err := conn.Write(md5sum); err != nil {
fmt.Println("Error while sending MD5 sum:", err)
continue
}
conn.Close()
}
}
```
你需要将`port`变量替换成你要监听的端口号。然后你可以运行这个程序并等待其他机器连接,计算MD5值并返回。
阅读全文