87 行
1.7 KiB
Go
87 行
1.7 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"bufio"
|
||
|
"crypto/sha1"
|
||
|
"encoding/hex"
|
||
|
"log"
|
||
|
"net"
|
||
|
"os"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
var sofname = "pwnd"
|
||
|
var version = "0.0.0"
|
||
|
var serverhost = "0.0.0.0"
|
||
|
var serverport = "9951"
|
||
|
var pwnroot = "/mnt/pwned/hashes/"
|
||
|
|
||
|
func checkPwnedHash(hash string) string {
|
||
|
prefix := strings.ToUpper(hash[:4])
|
||
|
filePath := pwnroot + prefix + ".txt"
|
||
|
|
||
|
file, err := os.Open(filePath)
|
||
|
if err != nil {
|
||
|
log.Printf("ファイル「%s」を開けられません: %v\n", filePath, err)
|
||
|
return "-1"
|
||
|
}
|
||
|
defer file.Close()
|
||
|
|
||
|
scanner := bufio.NewScanner(file)
|
||
|
for scanner.Scan() {
|
||
|
line := scanner.Text()
|
||
|
parts := strings.Split(line, ":")
|
||
|
if len(parts) != 2 {
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
if parts[0] == strings.ToUpper(hash) {
|
||
|
return parts[1]
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if err := scanner.Err(); err != nil {
|
||
|
log.Printf("ファイル「%s]を読み込まれません: %v\n", filePath, err)
|
||
|
}
|
||
|
|
||
|
return "0"
|
||
|
}
|
||
|
|
||
|
func handleConnection(conn net.Conn) {
|
||
|
defer conn.Close()
|
||
|
|
||
|
buf := make([]byte, 256)
|
||
|
n, err := conn.Read(buf)
|
||
|
if err != nil {
|
||
|
log.Println("クライアントからのエラー:", err)
|
||
|
return
|
||
|
}
|
||
|
password := strings.TrimSpace(string(buf[:n]))
|
||
|
|
||
|
sha1Hash := sha1.New()
|
||
|
sha1Hash.Write([]byte(password))
|
||
|
hash := hex.EncodeToString(sha1Hash.Sum(nil))
|
||
|
|
||
|
res := checkPwnedHash(hash)
|
||
|
conn.Write([]byte(res))
|
||
|
}
|
||
|
|
||
|
func main() {
|
||
|
listener, err := net.Listen("tcp", serverhost + ":" + serverport)
|
||
|
if err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
defer listener.Close()
|
||
|
|
||
|
log.Println("サーバーは " + serverhost + ":" + serverport + " で実行中・・・")
|
||
|
|
||
|
for {
|
||
|
conn, err := listener.Accept()
|
||
|
if err != nil {
|
||
|
log.Println("接続エラー:", err)
|
||
|
continue
|
||
|
}
|
||
|
go handleConnection(conn)
|
||
|
}
|
||
|
}
|