🖥

#Ruby の Faraday で ssh + SOCKS による https proxy 接続ができなかったので faraday_ada

2019/11/03に公開

SOCKS を起動

ssh -vND 8888  user@host

gem install

gem install faraday
gem install faraday_adapter_socks

Ruby or pry

環境変数に socks のURLを指定する

https_proxy=socks://127.0.0.1:8888 ruby some.rb
https_proxy=socks://127.0.0.1:8888 pry

Ruby Code

adapter を指定して get リクエストしてみる

Faraday.new(url: 'https://httpbin.org/ip') { |conn| conn.adapter :net_http_socks }.get.body

e.g result

IPアドレスを返してくれるサービスにリクエストを投げてみる
sshサーバーのIPアドレスが返ってきたら成功

[8] pry(main)> Faraday.new(url: 'https://httpbin.org/ip') { |conn| conn.adapter :net_http_socks }.get.body
=> "{\n  \"origin\": \"YYY.YYY.YYY.YYY, YYY.YYY.YYY.YYY\"\n}\n"

アダプタを指定しなかった場合

こんなエラーが起こっていた

[10] pry(main)> Faraday.new(url: 'https://httpbin.org/ip').get.body
Faraday::ConnectionFailed: end of file reached
from /usr/local/lib/ruby/2.5.0/net/protocol.rb:189:in `rbuf_fill'
Caused by EOFError: end of file reached
from /usr/local/lib/ruby/2.5.0/net/protocol.rb:189:in `rbuf_fill'

Grete gem "faraday_adapter_socks" !

thank you

https://github.com/goldeneggg/faraday_adapter_socks/blob/master/lib/faraday/adapter/net_http_socks.rb

module Faraday
  class Adapter < Middleware

    register_middleware net_http_socks: :NetHttpSocks

    class NetHttpSocks < Faraday::Adapter::NetHttp

      SOCKS_SCHEMES = ['socks', 'socks4', 'socks5']

      def net_http_connection(env)
        proxy = env[:request][:proxy]

        net_http_class = if proxy
          if SOCKS_SCHEMES.include?(proxy[:uri].scheme)
            Net::HTTP::SOCKSProxy(proxy[:uri].host, proxy[:uri].port)
          else
            Net::HTTP::Proxy(proxy[:uri].host, proxy[:uri].port, proxy[:user], proxy[:password])
          end
        else
          Net::HTTP
        end

        net_http_class.new(env[:url].host, env[:url].port)
      end
    end
  end
end

MiddleWare Image

image

https://lostisland.github.io/faraday/middleware/

Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/2660

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2019-11-03

Discussion