【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.

相关文章
|
2月前
|
网络协议 网络安全 数据安全/隐私保护
IPv4和IPv6有什么区别
IPv4和IPv6有什么区别
|
10月前
|
网络协议 Linux
如何在 Linux 中配置 IPv4 和 IPv6 地址?
如何在 Linux 中配置 IPv4 和 IPv6 地址?
263 0
|
网络协议 数据挖掘 网络性能优化
ipv6地址概述——了解ipv6与ipv4不同
一 ipv4与ipv6 1.ipv4的概述 目前的全球因特网所采用的协议族是TCP/IP协议族。IP是TCP/IP协议族中网络层的协议,是TCP/IP协议族的核心协议。目前IP协议的版本号是4(简称为IPv4),发展至今已经使用了30多年。 IPv4的地址位数为32位,也就是最多有2的32次方的电脑可以联到Internet上。 近十年来由于互联网的蓬勃发展,IP位址的需求量愈来愈大,使得IP位址的发放愈趋严格,各项资料显示全球IPv4位址可能在2005至2008年间全部发完。
197 0
ipv6地址概述——了解ipv6与ipv4不同
|
人工智能 网络协议 大数据
IPv6终于要取代IPv4了!阿里云将全面提供IPv6服务
近日,中办国办印发《推进互联网协议第六版(IPv6)规模部署行动计划》,加快推进基于IPv6的下一代互联网规模部署,计划指出到2018年末国内IPv6活跃用户数要达到2亿,2020年末达到5亿,2025年末中国IPv6规模要达到世界第一。
19301 0
|
网络协议 物联网 5G
浅谈IPv4协议与IPv6协议的区别!
在讲IPv4协议与IPv6协议的区别前,我们必须了解什么叫IPv4协议和IPv6协议? IPv4,是互联网协议(Internet Protocol,IP)的第四版,应属第一个被广泛应用,构成现阶段互联网技术的基础的协议。
1593 0
|
网络协议 Unix Linux
UNP总结 Chapter 12~14 IPv4与IPv6的互操作性、守护进程和inet超级服务器、高级I/O函数
一、IPv4与IPv6的互操作性 1.IPv4客户与IPv6服务器 拥有双重协议栈的主机的一个基本特性就是:其上运行的IPv6服务器既能应付IPv4客户,又能应付IPv6客户。这是通过使用IPv4映射的IPv6地址实现的。
900 0
|
网络协议 网络架构
|
机器学习/深度学习 网络协议 Perl