2016-12-07 11 views
4

私はGolangに立って、単純なHTTPサーバーを持っている:GoのローカルホストからのHTTP接続のみを受け入れますか?

h := http.NewServeMux() 
h.Handle("/somepath", MyHandler) 

s := &http.Server{ 
    Addr: "1234", 
    Handler: h, 
} 

s.ListenAndServe(); 

、呼び出し元がローカルホストされていない接続を切断するための最良の方法は何ですか?現在、私は基本的な接続情報を調べ、IPアドレスが127.0.0.1であることを確認することを検討していますが、最終的に接続を切断する前に、リソースの無駄が多くなります。理想的には、IPアドレスに基づいて最初のTCP SYNパケットをドロップし、TCP接続をまったく作成しない(またはこのポートがリスンしていることを明らかにする)ように、Golangサーバをインストルメントすることができます。

ここで最もきれいな経路は何ですか?

+1

文字通り、あなたが求めているのは、ホストファイアウォールを使用することです。 GoはTCP SYNパケットを表示しません。これはオペレーティングシステムで処理されます。 – JimB

+0

@JimB私はバインドしてポートで待機する前に(Linux上で実行する)シェルを外してIPTableルールなどを作成できますか? –

+9

なぜ 'http.ListenAndServe(" localhost:80 "、nil)'?これはサービスをローカルホストにのみバインドします。 – VonC

答えて

8

VonCさんの回答を回答に変換しています。

http.Server.Addrまたはhttp.ListenAndServehost:portを設定してホストをバインドできます。

内部でnet.Listenを使用しています。 net.Listenから

: "127.0.0.1:8080" のように: "ポートホスト"、

TCPとUDPの場合は、LADDRの構文は次のとおりです。 ":8080"のようにhostが省略されている場合、Listenは指定された ホストアドレスのインターフェイスではなく、利用可能なすべてのインターフェイスを でリッスンします。

関連する問題