Как получить IP-адрес клиента?

#elixir #phoenix-framework

#elixir #phoenix-framework

Вопрос:

Мне нужно получить IP-адрес клиента, это не работает:

   def create(conn) do
    ip_address = conn.inet.ip_address
    # ....
  

из-за key :inet not found in: %Plug.Conn . Как я могу тогда получить IP-адрес?

Ответ №1:

The получить IP:

conn.remote_ip

Приведение из ip_address в string:

to_string(:inet_parse.ntoa(conn.remote_ip))

Комментарии:

1. Код приведения не является Elixir 🙂 Это способ Elixir: conn.remote_ip |> :inet_parse.ntoa |> to_string() 😉

Ответ №2:

Проверьте эти поля запроса:

remote_ip — IP-адрес клиента, пример: {151, 236, 219, 228}. Это поле предназначено для перезаписи плагинами, которые понимают, например, заголовок X-Forwarded-For или протокол ПРОКСИ HAProxy. По умолчанию используется IP-адрес однорангового узла.

Это то, что вы ищете:

 conn.remote_ip
  

Комментарии:

1. conn.remote_ip |> Tuple.to_list |> Enum.join(".") также будет работать. Нет необходимости выполнять Integer.to_string вызов.

2. Упомянутые примеры работают только для адресов IPv4. Если вам нужно решение для IPv4 и IPv6, используйте функцию ntoa inet от Erlang: conn.remote_ip |> :inet.ntoa() |> to_string()