Saki0506
@Saki0506 (さき おぐら)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Linux Kaliでgophishがつかえない

解決したいこと

Linux Kaliでgophishを使用したいのですができません。

指定のディレクトリにいどうして「go build」コマンドを打ってもエラーがでます。

/src/github.com/gophish/gophishというディレクトリが見つからないので、/home/kali/go/pkg/mod/github.com/gophishで「go build」コマンドを実行しました。
findコマンドで/home/kali/go配下を探しましたが一番近いものが上記のものでした。

参考URL
https://developers.freee.co.jp/entry/gophish-targeted-threat-training

  1. apt install golangでGoのインストール
  2. go get github.com/gophish/gophishでgophishインストール 3./home/kali/go/pkg/mod/github.com/gophishで「go build」コマンドを実行したがエラー

発生している問題・エラー

┌──(kali㉿kali)-[~/…/pkg/mod/github.com/gophish]
└─$ go build  
go: go.mod file not found in current directory or any parent directory; see 'go help modules'

┌──(kali㉿kali)-[~/…/pkg/mod/github.com/gophish]
└─$ pwd                                               1 ⨯
/home/kali/go/pkg/mod/github.com/gophish

└─$ ls                                               127 ⨯
gomail@v0.0.0-20200818021916-1f6d0dfd512e  gophish@v0.11.0

┌──(kali㉿kali)-[~/…/pkg/mod/github.com/gophish]
└─$ 


└─$ go version
go version go1.16.9 linux/amd64


└─$ go help modules
Modules are how Go manages dependencies.

A module is a collection of packages that are released, versioned, and
distributed together. Modules may be downloaded directly from version control
repositories or from module proxy servers.

For a series of tutorials on modules, see
https://golang.org/doc/tutorial/create-module.

For a detailed reference on modules, see https://golang.org/ref/mod.

By default, the go command may download modules from https://proxy.golang.org.
It may authenticate modules using the checksum database at
https://sum.golang.org. Both services are operated by the Go team at Google.
The privacy policies for these services are available at
https://proxy.golang.org/privacy and https://sum.golang.org/privacy,
respectively.

The go command's download behavior may be configured using GOPROXY, GOSUMDB,
GOPRIVATE, and other environment variables. See 'go help environment'
and https://golang.org/ref/mod#private-module-privacy for more information.


自分で試したこと

WEBサイトや公式ドキュメントの参照

もしわかる方がいましたら教えていただけると嬉しいです。
よろしくお願いします。

0

1Answer

参考にされた記事の手順は Go にモジュールシステムが導入される前のものなので使えません。代わりに go install github.com/gophish/gophish を実行してください。ソースコードをダウンロードしてビルドからインストールまで完了し、 gophish コマンドが使えるようになります。

(実は現在は go get github.com/gophish/gophish でもインストールされますが、この挙動は将来的に廃止されます。詳しくは https://qiita.com/eihigh/items/9fe52804610a8c4b7e41

もし自分でソースコードからビルドしたい場合は、 go/pkg/mod 以下のディレクトリにあるソースコードを使うべきではありません。以下のようにリポジトリをクローンしてその中で go build してください。

git clone https://github.com/gophish/gophish.git
cd gophish
go build
0Like

Comments

  1. @Saki0506

    Questioner

    いつも回答していただき本当にありがとうございます( ;∀;)
    なぜかKaliでコマンドを実行したところエラーになってしましましたが、macでやったら問題なくできました、ありがとうございます。
    ただ、なぜローカルのディレクトリにあるコードを実行するのではなくクローしたものを実行するのが良いのでしょうか?gitのクローンは共同開発時などに使われると教科書で習ったので、他の人が使うわけでもないにインストールしたローカルのものを使用できない理由が気になりました。
    もしよろしければ教えていただけると嬉しいです。
    ちなみに「ペネとレーションテストの教科書」という本で学んでいるのですがこちらは「go get github.com/gophish/gophish」でインストールしたものをそのままローカルで使用するように指示があります。
  2. いい質問ですね。まず go get を使う指示は古いやり方です。長くなりますが go get コマンドの変遷を説明します。

    以前の Go では go get github.com/XXX/YYY コマンドは2つの役割を持っていました。

    - ソースコードを $GOPATH/src/github.com/XXX/YYY/ に保存
    - それをビルドし、生成された実行ファイルを $GOPATH/bin/ にインストール

    ($GOPATH は未設定なら $HOME/go と同値)

    保存されたソースコードは書き換えたり自分で go build したりすることもできますが、主目的は別です。 $GOPATH/src 以下は、 import "github.com/XXX/YYY" のようなインポート文を含む Go コードをビルドするとき、そこからコードを読み込むためにあります。

    この方式には問題があって、ある Go コードでは github.com/XXX/YYY のバージョン1.0をインポートし、別のコードではバージョン2.0をインポートするといったことができませんでした。 github.com/XXX/YYY はダウンロードしたときのバージョン1種類しか保存できないからです。(面倒な方法で迂回できますが省略します)

    そこで最近の Go ではモジュールの仕組みが導入されました。モジュール以前・以後の違いはこの記事が詳しいです。 https://zenn.dev/spiegel/articles/20210223-go-module-aware-mode

    モジュール対応モードでは、 go get github.com/XXX/YYY は3つの役割を持っています。

    - ソースコードを $GOPATH/pkg/mod/github.com/XXX/YYY@バージョン番号/ にキャッシュ
    - モジュールの依存関係に github.com/XXX/YYY を追加
    - ソースコードをビルドし、生成された実行ファイルを $GOPATH/bin/ にインストール(この挙動は近々廃止予定。同等の機能は go install コマンドに移行)

    キャッシュされたソースコードは他の Go コードからインポートされるためだけに使われます。うっかりソースコードを改変してしまうのを防ぐためにキャッシュのパーミッションはすべて書き込み不可になっています。よってディレクトリに cd して go build してもビルドの成果物を保存できず、ビルドが失敗します。

    まとめると、最近の Go で go get すると

    - $GOPATH/src/ 以下にソースコードを保存しなくなった
    - $GOPATH/pkg/mod/ 以下にキャッシュするようになったが、それは go build できない
    - ビルドして実行ファイルをインストールもするが、その挙動は廃止予定

    ということです。ソースコードからビルドしたいなら別の方法でダウンロードし、実行ファイルをインストールしたいだけなら go install を使ってください。
  3. > なぜローカルのディレクトリにあるコードを実行するのではなくクローしたものを実行するのが良いのでしょうか?

    go get でダウンロードしたソースコードは上記の通り使えません。代わりに git でクローンしたのは手っ取り早くダウンロードできるからというだけです。何か他の方法でダウンロードしたものを使ってももちろん大丈夫です。

    ちなみに、 git は共同開発だけでなく個人開発でも非常に有用です。多少なりプログラミングをするのであれば覚えることを強くおすすめします。メリットはこちらの記事によくまとまっています。 https://it-jog.com/khow/git/recommendedgit
  4. @Saki0506

    Questioner

    いつもわかりやすい解説本当にありがとうございます!
    週末にでもgitの勉強もしてみます。本当にありがとうございました。

Your answer might help someone💌