Antkillerfarm Hacking V7.0

网络杂谈, ZeroMQ, ActiveMQ

2015-12-22

网络杂谈

集线器&交换机&路由器

1.集线器,又名HUB。一般只起增强信号的作用,并不对流经的数据进行处理。数据转发采用广播方式,只适合少量终端设备的情况。

2.交换机。它会对转发数据的数据链路层(OSI第二层)进行处理。

2.路由器。它会对转发数据的网络层(OSI第三层)进行处理。

以上都是一些原始定义,实际情况中,由于都是网络数据交换设备,跨界的情况随着硬件的升级,而屡见不鲜。比如现在的集线器,多数也有简单的数据处理能力;而现在的交换机,有的也有第三层处理能力(比如三层交换机)。

以我的经历为例,2003年左右,大学宿舍的兄弟们就使用集线器,进行联网游戏。

2007年,换用交换机,和合租的同事,一起上网。

2010年,换用无线路由器,手机也可以wifi上网了。

XMPP

XMPP(Extensible Messaging Presence Protocol)和SIP(Session Initiation Protocol)都是应用层的数据交换协议。作为它们前辈的HTTP虽然取得很大成功,但也存在如下问题:

1.内容形式主要限定为html,对于传输非界面数据的应用来说,效率不高,也不专业。

2.HTTP基于Client发送请求,Server响应的模式。对于VOIP这样的应用来说,Server主动发送数据的能力显然更关键。

XMPP和SIP的特点如下表所示:

XMPP SIP
核心协议的目的 服务于结构化的数据交换 服务于连接的建立
核心外扩展 添加Jingle协议支持面向连接的业务 添加SIMPLE协议支持即时通信业务
应用支持和扩展性 一般
数据格式 XML,易解析 文本,不易解析。
通道方式 控制和数据通道是一体的,Clent只与Server建立连接,而Client与client之间是没有连接的。Client之间传送的通道是:Client1-->Server1-->Server2-->Client2。这种方式看起来扩展性差,Server压力很大,但是能够实现很好的业务功能,比如留言、广播、群聊、状态更新、Blog、微博、数据共享等等。 连接建立通道与数据传送通道是各自独立的,连接建立在Client与Server之间,而数据传送通道是在Client-->Client之间直接进行的。这个对视频、语音和文件传送业务很合适,但是不适合其他形式的应用。
底层协议 TCP and TLS only UDP, TCP and TLS
连接方式 单向连接,只有Client可以向Server发起连接请求,Server不会向Client发起连接。这样便于NAT和firewall的穿越。 双向对称,客户端和服务器都可以主动发起连接请求并响应,这种对称连接的方式在穿越NAT和firewall的时候,带来很大的复杂性,无法保证穿越NAT。
前景 开源实现众多,应用广泛。且被Google、MS、Facebook等巨头支持,前景乐观。 核心外业务没有起色。核心业务也遭到Jingle协议的挑战。

参考文献:

http://my.oschina.net/linuxhunter/blog/35370

基于loudmouth的XMPP客户端DEMO

http://xmpp.org/xmpp-software/

这个网页列出了XMPP的各种客户端、服务器以及库的实现。在我们的项目中,服务端使用Openfire,嵌入式客户端使用gloox。

http://www.cnblogs.com/hoojo/archive/2013/03/29/openfire_plugin_chatlogs_plugin_.html

Openfire的聊天记录插件开发。

Openfire

安装

Openfire的官网是:

http://www.igniterealtime.org/projects/openfire/

从官网可下载源代码包和可执行文件包,这里选用deb格式的安装包。安装之后的文件主要在:

1./etc/openfire。配置文件目录

2./usr/share/openfire。可执行文件及jar库的目录。

运行

可以使用以下命令:

/etc/init.d/openfire {start|stop|restart|status|condrestart|reload}

设置

web设置可访问以下网址:

http://127.0.0.1:9090

Spark

Spark和Openfire都是Ignite Realtime的产品。Spark是一个Java写的XMPP客户端。注意,这个Spark和Hadoop生态圈的Spark不是同一个软件。

我一开始直接下载二进制包,但无法运行,原因不详。

于是改用源代码编译的方式。源代码地址:

https://github.com/igniterealtime/Spark

编译方法:

cd build

ant

可执行程序:arget/build/bin/startup.sh

登陆时的“服务器”一栏,要填写服务器名称,填IP地址是不行的。

osip & eXosip

osip是SIP协议的一个开源实现。其官网为:

http://savannah.gnu.org/projects/osip

eXosip在osip上封装了一层,简化了在多媒体会话方面SIP协议的使用。其官网为:

http://savannah.nongnu.org/projects/exosip/

IRC

最近,由于捣鼓VNC剪贴板没有结果,我不得不寻找它的替代方案,这时IRC进入了我的视线。

IRC虽然没有XMPP那么强的功能,但毕竟是20年前的东西了,各种资料和支持都比较完善,使用配置也没有后者那么复杂,是个不错的东西。

IRC Server

这里推荐两款:

1.ircd-hybrid

http://ircd-hybrid.org/

2.unrealircd

https://www.unrealircd.org/

安装教程:

http://soft.dog/2016/03/25/unrealircd-basic/

IRC Client

开始使用的是hexchat。官网:

https://hexchat.github.io

Windows版本做的不错,但Linux版本老是运行不起来。。。

最后一气之下,想到了emacs,而后者也不负所望。

M-x erc

IRC命令

常用IRC命令参见:

https://en.wikipedia.org/wiki/List_of_Internet_Relay_Chat_commands

注意细节如下:

1.join命令中输入的channel名如果不存在,则会创建channel。相当于该命令既是加入命令,也是创建命令。

NTP

Network Time Protocol,是用来让计算机之间实现时间同步的协议。

网上可用的NTP Server列表,可参见:

http://www.pool.ntp.org/en/

ntpdate cn.pool.ntp.org

NTP的Client有很多,这里使用ntpclient软件。它的官网:

http://doolittle.icarus.com/ntpclient/

调试的时候,可以使用如下命令设置时间:

sudo date -s 10:00:00

修改之后,可用date命令查看系统当前时间,确认修改的效果。

ntpd是NTP的另一个实现,既可以当Server,也可以当Client,已经被集成进busybox。

https://mp.weixin.qq.com/s/OEbhKBBbo-eo4NWmLYmGDg

有关部分北京市民“穿越”的科学解读

https://mp.weixin.qq.com/s/wX-BXGDAZGm8FYc6-FbUhg

用NTS保证NTP的安全

socket通信基本流程

  • TCP
服务器端 客户端
1.创建socket 1.创建socket
2.bind 2.listen
4.accept  
等待客户端连接 3.connect
5.读数据(recv) 4.写数据(send)
6.写数据(send) 5.读数据(recv)
7.关闭socket(closesocket) 6.关闭socket(closesocket)
  • UDP
服务器端 客户端
1.创建socket 1.创建socket
2.bind 2.bind
3.recvfrom  
等待连接 3.sendto
4.sendto 4.recvfrom
5.关闭socket(closesocket) 5.关闭socket(closesocket)

在linux当中,socket包括两类:使用网络的socket,称为Berkeley socket;不使用网络的socket,称为Unix domain socket。两者API结构很像,所以容易被混淆,但是其实不是一个东西。

Unix domain socket是为单机上跨进程通信,也就是IPC设计的。通信数据直接通过kernel在进程间交换,与网卡毫无关联。

本机Socket通信不走网卡,不走物理设备,但是走虚拟设备,loopback device环回。

https://www.zhihu.com/question/43590414

Linux中本机和本机Socket通信会走网卡吗?

WIFI WPS

WPS分为PBC(BUTTON)和PIN两种方式

PBC

按WPS按钮实现WPS安全连接。

在AP中,在WPS设置中,设置为启用。

按一下客户端(无线网卡)上的WPS按键,搜索WPS网络。

按一下AP上的WPS按键,WPS开始链接协商,片刻后WPS安全连接成功建立。

PIN

1.PIN(Internal Registra, 相对于AP而言):通过在路由器中输入客户端PIN码来实现WPS安全连接。

在WPS设置中,把状态设置为启用。

打开客户端WPS设置软件,选择在路由器中输入PIN的方式连接,同时软件上还会显示客户端当前的PIN码。

打开路由器界面,在WPS模式里选择PIN模式,然后输入客户端的PIN码, 点添加新设备,一会儿后,WPS安全连接成功建立。

2.PIN(External Registra, 相对于AP而言):通过输入AP的PIN码实现WPS安全连接。

在AP中,在WPS设置中,设置为启用。

记住AP的PIN码,然后打开客户端(无线网卡)WPS设置软件,选择以AP的PIN码来进行连接。

输入完PIN码后,点下一步,一会儿后,WPS安全连接成功建立。

ZeroMQ

ZeroMQ是个在Socket之上,而在MQ之下的网络通信库。正如名称所言,它实际上并不是一个完整的MQ,而仅仅只有MQ的一些子功能罢了。

http://zeromq.org

参考:

https://blog.csdn.net/w174504744/article/details/73187697

ZeroMQ

ActiveMQ

ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。

http://blog.csdn.net/jiuqiyuliang/article/details/46701559

深入浅出JMS(一)–JMS基本概念

Fork me on GitHub