Browsed by
Tag: ip

linux环境中getnameinfo的问题

linux环境中getnameinfo的问题

在linux环境下获取本地IP地址的方法,通常都是先getifaddrs获取当前计算机中所有的接口信息,然后循环调用getnameinfo获取各接口的IP地址。

这是网络上常见的描述方式。在IPv4组网时,没有任何问题。但是在IPv6组网(获取IPv6地址)时,出现了问题。由该函数返回的IP地址字符串中包含了当前接口的名称,例如以下返回值:

fe80::5a94:6bff:fe48:4cec%wlan1

如果想获得纯粹的IPv6地址,应当通过接口地址信息,调用inet_ntop来转换IP地址为字符串,如下处理:

char ipstr[512]={0};
sockaddr_in6* sockaddr_ipv6=reinterpret_cast<sockaddr_in6*>(ifa->ifa_addr);
inet_ntop(AF_INET6,&sockaddr_ipv6->sin6_addr,ipstr,sizeof(ipstr));

此时获取的IP地址字符串信息就不再包含当前接口的名称:

fe80::5a94:6bff:fe48:4cec

IPv6地址带接口名称实际是“zone identifier (区域标识)”,在RFC6874规范中有相应的定义。

2014-06-08 updated:

在Linux系统中,要使用ping6命令来ping IPv6的地址,并且要求带上接口索引。例如如果只是ping IPv6地址,会返回以下错误:

ping6 fe80::a00:27ff:fe37:a9d0
connect: Invalid argument

正确的使用方法如下所示:

ping6 fe80::a00:27ff:fe37:a9d0%eth0
iptables常用命令

iptables常用命令

前段时间安装fail2ban后,陆续发现了一批IP地址在尝试暴力破解我们服务器的用户名和密码。无论这些IP地址是来自可怜的肉鸡,还是真实的弱智黑客,直接屏蔽掉这些地址更好,免得浪费计算资源。

由于fail2ban实际也是利用了iptables,因此花了点时间研究iptables,干脆直接使用iptables屏蔽那些已经暴露的IP地址。以下是一些常用的命令:

查看iptables已有的规则

sudo iptables -L -n --line-numbers

删除一个已有的规则

sudo iptables -D INPUT 8

其中,’8’是INPUT链里的序号。

屏蔽一个IP地址,例如116.10.191.185

sudo iptables -A INPUT -s 116.10.191.185 -j DROP

屏蔽一段IP地址,例如从116.10.191.0 ~ 116.10.191.255

sudo iptables -A INPUT -s 116.10.191.0/24 -j DROP

注意,‘24’是mask位,表示采用头三个字节(24位)进行mask。

我们可以将上述规则写入/etc/rc.local,系统启动时能自动屏蔽这些垃圾IP地址。

由软件+硬件想到的

由软件+硬件想到的

自从苹果重新崛起后, “软件+硬件”的产品形态引起了大家的关注. 以往要么关注硬件, 要么关注软件. 而一体化设计带来的革命性体验, 重新引发了再思考: 专注在硬件, 或者专注在软件还是未来的趋势么?

其实不仅是苹果在终端层面带来一体化体验, 在核心网络层面, IBM也实际上走软硬一体的路子, 包括现在的Oracle也在进行这方面的尝试.

由此我们对通信领域进行再思考: 通信设备提供商和通信业务服务商(运营商)在未来有没有可能融合呢? 早期的AT&T毫无疑问是这种模式的实践者, 并达到了让人惊恐的量级. 而目前随着云计算\云技术的发展, 基于这些技术提供分布式虚拟通信设备, 并提供个性化通信服务似乎不在是梦想.

自己构造通信基础设施, 直接面对终端用户, 直接迭代式开发, 快速满足用户的个性化需求, 带给用户全新的通信体验, 这似乎不能依赖各自分离的通信设备商或者通信运营商来完成了. 传统的通信生态圈在很大程度上是由硬件的复杂性决定的, 各种各样的硬件设备\通信协议\电气协议\网络等级等因素造成了整个网络的复杂性, 封闭性. 而IP技术不断渗透到通信领域, 实际上在不断降低通信的门槛, 并将整个通信网扁平化, 开放化.

可以设想, 如果将来的通信网全部IP化后会怎样? 首先就是目前的那些专有硬件设备大部分都不再需要了, 通信网将是一个扁平的平等网络, 原有的基础通信概念都将被颠覆. 现有的通信设备和运行模式无法满足更有弹性, 更大容量, 更个性化的通信需求.

而融合产品设计实现与业务运营的模式, 可能是未来的趋势. 这种模式在传统的PSTN通信网络体系中是不可能出现的, 而在未来的全IP通信网中极有可能实现.