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.

【erlang】IPv6格式转IPv4的更多相关文章

  1. 虚拟机ip地址从ipv6改为ipv4相关问题

    有一次打开虚拟机时,Xshell连接不上虚拟机,就很奇怪,然后查看虚拟机的ip地址,发现显示为ipv6格式,然后总结了两种情况如下: 第一种情况: onboot为no时显示ipv6地址, 改为yes即 ...

  2. 为什么 IPv6 难以取代 IPv4

    网络层协议承担了分组(Packet)转发和路由选择两大功能,它能够为上层提供在不同主机之间运输分组的职责,IP 协议作为网络层协议,它虽然只能提供无连接的.不可靠的服务,但是它在今天的互联网中起到了极 ...

  3. 免费IPv6访问收费IPv4,校园网免流量

    软件:马上6 介绍: “可以让用户在免费的IPv6网络环境,有具备访问收费的IPv4互联网内容的能力!节省校园网流量!使用马上6客户端软件之后可以访问的IPv4互联网的内容(包括视频.游戏.音乐.学习 ...

  4. 图解centos7如何关闭ipv6仅使用ipv4

    方法/步骤     使用ifconfig命令查看网卡信息,如果出现inet6 fe80::20c:29ff:fed0:3514,说明机器开启了ipv6,如下图所示:   编辑/etc/sysctl.c ...

  5. 用IPV6隧道连接IPV4孤岛

    hostA和hostB之间是IPV6连接的,但是之前的服务只能支持IPV4,兼容IPV6比较困难.所以用隧道实现hostA和hostB之间用IPV4连接. hostA如下: ip -6 addr ad ...

  6. 虚拟机只有IPv6,没有ipv4

    1.修改配置文件 vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=none HWADDR=00:0C:29:20: ...

  7. IP协议详解

    Internet地址结构 表示IP地址 目前的IP版本有4和6. 目前最流行的就是IPv4,有十进制和二进制两种表示方法.分别是: 点分四组十进制.每一组范围是[0~255],如:255.255.25 ...

  8. Linux 进程间通信(二)(网络IPC:套接字)

    socket描述符 套接字是通信端点的抽象,创建一个套接字使用如下函数: #include <sys/socket.h> int socket(int domain, int type, ...

  9. WinPcap笔记2之获取已经安装设备的高级信息

    1 主要数据结构定义 struct pcap_if//网络接口列表的一个节点 一个网络接口就是一个结点 方便链表    {        struct pcap_if *next;//网络接口节点   ...

随机推荐

  1. VS2010 + Entity FrameWork 4.4 +Mvc 4.0 出现的错误

    Compiler Error Message: CS0012: The type 'System.Data.Objects.DataClasses.EntityObject' is defined i ...

  2. oracle的char和varchar类型

    源地址:https://zhidao.baidu.com/question/140310197.html varchar与char的区别就在于是否可变长度.char(5)就是定义一个5个字符长度的字符 ...

  3. json格式的数组长度

    var data = [{"id":"1","name":"a"},{"id":"2&qu ...

  4. coroSync packmarker

    CoroSync+Pacemaker实现web高可用 2015-04-12 23:38:19 标签:CoroSync pacemaker 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 ...

  5. js进度条实现

    1.先设置CSS样式(可自定义) /*#region 进度条 */ .progbar { background-color: #e1e1e1; width:auto; color: #222; hei ...

  6. 网站实现特定某个地区访问执行跳转(js方法)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. maximo功能修改笔记

    经过前几次的简单的修改系统功能,对maximo的bean开发已经有了一定了解,现在是耗时近两个礼拜来修改了一项系统功能,所用到的知识 Bean Fld, 下面我认真总结修改功能过程中的学到的知识: 目 ...

  8. findstr 命令

    body { font-family: Bitstream Vera Sans Mono; font-size: 11pt; line-height: 1.5; } html, body { colo ...

  9. 使用get传参的时候,参数在后头获取不到或者出现别的错误。

    把传递的参数使用encode转换一下,符合HTTP规定的编码,再使用. String encode = java.net.URLEncoder.encode("VSrYJoDat8z7Ad9 ...

  10. php json_encode中文unicode问题

    php调用json_encode将中文字符串存入mysql后读取出来有问题,发现存进去的时候把'\'给去掉了.解决方法是调用json_encode时候后面加JSON_UNESCAPED_UNICODE ...