Membuat script untuk memindai setiap file menggunakan bahasa pemrograman Go (Golang) bisa menjadi alternatif yang lebih efisien dibandingkan dengan Bash scrip karena dapat membuat waktu eksekusi menjadi lebih cepat dan penggunaan resource memori yang lebih rendah, sehingga proses pemindaian file dapat berjalan lebih optimal.
Setup Go
Download Go untuk Linux melalui go.dev/dl
wget https://go.dev/dl/go1.23.2.linux-amd64.tar.gz
Kemudian extract archive ke /usr/local
.
tar -xaf go1.23.2.linux-amd64.tar.gz -C /usr/local/
Selanjutnya edit file .bash_profile
lalu tambahkan baris berikut.
export PATH=$PATH:/usr/local/go/bin
Setelah itu, Anda dapat mengecek versi Go dengan perintah.
$ go version
go version go1.23.2 linux/amd64
Example Script
Buat file scan.go
.
nano scan.go
Kemudian tambahkan kode berikut.
package main
import (
"flag"
"fmt"
"io/ioutil"
"os"
"path/filepath"
"strings"
)
func main() {
// Definisikan flag untuk menerima argumen --target
var targetFolder string
flag.StringVar(&targetFolder, "target", "", "Path ke folder yang ingin diperiksa")
flag.Parse()
if targetFolder == "" {
fmt.Println("Harap tentukan path folder dengan menggunakan flag --target")
return
}
// Kata kunci yang ingin Anda cocokkan
keywords := []string{
"casino",
"gacor",
}
// Lakukan pemindaian pada semua file di folder
err := filepath.Walk(targetFolder, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
// Memeriksa apakah file adalah symlink
if !info.Mode().IsRegular() {
return nil // Mengabaikan symlink
}
if !info.IsDir() {
// Hanya memeriksa file .php saja
//if !info.IsDir() && strings.HasSuffix(info.Name(), ".php") {
content, err := ioutil.ReadFile(path)
if err != nil {
return err
}
// Cocokkan dengan kata kunci
for _, keyword := range keywords {
if strings.Contains(string(content), keyword) {
fmt.Printf("File %s mengandung kata kunci: %s\n", path, keyword)
}
}
}
return nil
})
if err != nil {
fmt.Println("Terjadi kesalahan:", err)
}
}
Selanjutnya Anda dapat menjalankan script dengan menambahkan argumen --target
diikuti dengan path dari folder yang ingin dipindai.
go run scan.go --target /path/ke/folder