Skip to main content
  1. Posts/

File Scanning with Go

·2 mins·
golang golang
Table of Contents

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

Related

Web Scraping with Go
·3 mins
golang golang
Web Scraping with Node.js
·2 mins
nodejs nodejs
How to Configure cGroups v2 on Linux
·2 mins
linux linux
How to Disable User Crontab in Linux
·1 min
linux linux
Cara Mengaktifkan Jumbo Frame
·2 mins
linux linux ubuntu windows
Per-Client Throttling in OpenLiteSpeed
·1 min
litespeed litespeed