zoukankan      html  css  js  c++  java
  • 【erlang】IPv6格式转IPv4

    erlang里面的httpd模块保存的http请求头里面,其中remote_addr 保存的是IPv6的格式。

    即使是IPv4,也会用IPv6的格式来保存。如

    {remote_addr, "0:0:0:0:0:FFFF:C0A8:4E01"}

    其实表示的就是IPv4为127.0.0.1的IPv6格式。

    虽然IPv6是趋势,但没使用,这样用起来很不方便。特别是我这边要实现一个IP白名单的功能。

    所以写了一个比较简单的转换方法。

    -module(test).
    -export([ipv6_2_ipv4/1]).
    
    
    %% V6 = "0:0:0:0:0:FFFF:C0A8:4E01".
    ipv6_2_ipv4(V6)->
        L1 = string:tokens(V6,":"),
        V4_7 = format(lists:nth(7, L1)),
        V4_8 = format(lists:nth(8, L1)),
        Ip1 = list_to_integer(string:substr(V4_7, 1, 2), 16),
        Ip2 = list_to_integer(string:substr(V4_7, 3, 2), 16),
        Ip3 = list_to_integer(string:substr(V4_8, 1, 2), 16),
        Ip4 = list_to_integer(string:substr(V4_8, 3, 2), 16),
        {Ip1, Ip2, Ip3, Ip4}.
    
    
    %% =================
    %% internal function
    %% =================
    format(Term) when length(Term) =:= 1 ->
        "000"++Term;
    format(Term) when length(Term) =:= 2 ->
        "00"++Term;
    format(Term) when length(Term) =:= 3 ->
        "0"++Term;
    format(Term) when length(Term) =:= 4 ->
        Term.
  • 相关阅读:
    编码
    浏览器翻页
    验证码识别
    时间
    phantomjs配置
    产品
    java范型的理解
    使用JDBC连接数据库
    垃圾回收机制
    java的内存区域 && java内存模型
  • 原文地址:https://www.cnblogs.com/rond/p/4240341.html
Copyright © 2011-2022 走看看