【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.
【erlang】IPv6格式转IPv4的更多相关文章
- 虚拟机ip地址从ipv6改为ipv4相关问题
有一次打开虚拟机时,Xshell连接不上虚拟机,就很奇怪,然后查看虚拟机的ip地址,发现显示为ipv6格式,然后总结了两种情况如下: 第一种情况: onboot为no时显示ipv6地址, 改为yes即 ...
- 为什么 IPv6 难以取代 IPv4
网络层协议承担了分组(Packet)转发和路由选择两大功能,它能够为上层提供在不同主机之间运输分组的职责,IP 协议作为网络层协议,它虽然只能提供无连接的.不可靠的服务,但是它在今天的互联网中起到了极 ...
- 免费IPv6访问收费IPv4,校园网免流量
软件:马上6 介绍: “可以让用户在免费的IPv6网络环境,有具备访问收费的IPv4互联网内容的能力!节省校园网流量!使用马上6客户端软件之后可以访问的IPv4互联网的内容(包括视频.游戏.音乐.学习 ...
- 图解centos7如何关闭ipv6仅使用ipv4
方法/步骤 使用ifconfig命令查看网卡信息,如果出现inet6 fe80::20c:29ff:fed0:3514,说明机器开启了ipv6,如下图所示: 编辑/etc/sysctl.c ...
- 用IPV6隧道连接IPV4孤岛
hostA和hostB之间是IPV6连接的,但是之前的服务只能支持IPV4,兼容IPV6比较困难.所以用隧道实现hostA和hostB之间用IPV4连接. hostA如下: ip -6 addr ad ...
- 虚拟机只有IPv6,没有ipv4
1.修改配置文件 vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=none HWADDR=00:0C:29:20: ...
- IP协议详解
Internet地址结构 表示IP地址 目前的IP版本有4和6. 目前最流行的就是IPv4,有十进制和二进制两种表示方法.分别是: 点分四组十进制.每一组范围是[0~255],如:255.255.25 ...
- Linux 进程间通信(二)(网络IPC:套接字)
socket描述符 套接字是通信端点的抽象,创建一个套接字使用如下函数: #include <sys/socket.h> int socket(int domain, int type, ...
- WinPcap笔记2之获取已经安装设备的高级信息
1 主要数据结构定义 struct pcap_if//网络接口列表的一个节点 一个网络接口就是一个结点 方便链表 { struct pcap_if *next;//网络接口节点 ...
随机推荐
- Hadoop 2.6 MapReduce运行原理详解
市面上的hadoop权威指南一类的都是老版本的书籍了,索性学习并翻译了下最新版的Hadoop:The Definitive Guide, 4th Edition与大家共同学习. 我们通过提交jar包, ...
- Spark往Elasticsearch读写数据
def main(args: Array[String]): Unit = { val sparkConf = new SparkConf().setAppName("DecisionTre ...
- [ActionScript 3.0] 喷泉效果
pall为水珠影片剪辑 var count:int = 500; var zl:Number = 0.5; var balls:Array; balls = new Array(); for (var ...
- css学习笔记(8)
1.元素使用了float以后就脱离了文档流,不能通过margin:0 auto;来居中了. 2.position:relative;定位后可以通过margin:0 auto;来居中,也说明了relat ...
- Oracle死锁产生的原因和解决办法
如果有两个会话,每个会话都持有另一个会话想要的资源,此时就会发生死锁.用下面实验来说明死锁的产生原因和解决办法.SESSION1:SQL> create table t2 as select * ...
- Django进阶篇(一)
Form django中的Form一般有两种功能: 1.输入html 2.验证用户输入 最简易的form验证: <!DOCTYPE html> <html lang="en ...
- No.3__C#
起步的迷思 周二:今天起来,天上下着小雨,气温降低了许多.从上周的二十多度又回到了七八度的样子.多穿了一件衣服,顶着寒风就出门了,确实是有点冷.到了公司,已经八点四十几了.有些小疲倦,头晕晕沉沉的,不 ...
- Spring MVC入门知识总结
2.1.Spring Web MVC是什么 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职 ...
- python中的装饰器
一.什么是装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能 ...
- 【转】关于LWF——线性工作流
1.什么是LWF? LWF全称Linear Workflow,中文翻译为线性工作流.“工作流”在这里可以当作工作流程来理解.LWF就是一种通过调整图像Gamma值,来使得图像得到线性化显示的技术流程. ...