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