欢迎访问我的博客,你的支持,是我最大的动力!

利用MAC-Telnet协议进行纯二层网络通信(telnet/ssh)

Linux 小马奔腾 548℃ 评论
目录:
[显示]

Mac-Telnet协议通过二层mac进行通信,不依赖于IP地址。通过抓包,可以发现,服务端与客户端通信中,使用的是二层的广播(目标地址:ff:ff:ff:ff:ff:ff)进行通信,即只要在同一个二层广播域内,两台服务器可以在没有IP地址或者IP网段不相同,不能进行IP通信的情况下,仅通过从网卡发出二层mac报文,即可进行通信,如进行telnet或ssh登录另一台服务器。这在某些场合下,或许非常有用。

haakonnessjoen的源码是最基础的,aouyar对其进行了改进和增强,比如可以支持tcp遂道,可以转发ssh流,推荐使用aouyar的源码。

项目地址:https://github.com/haakonnessjoen/MAC-Telnet
项目地址:https://github.com/aouyar/MAC-Telnet
文档:http://aouyar.github.io/MAC-Telnet/

编译源码
# 准备编译环境
yum -y install wget automake gettext gettext-devel gcc make git

开始编译源码

# 下载源码
git clone https://github.com/cnznet/MAC-Telnet.git  #我将源码保存到自己的仓库了
#  编译
cd MAC-Telnet
make all
make install
install -d /usr/share/man/man1/
install docs/*.1 /usr/share/man/man1/
install -d /usr/bin
install mndp /usr/bin/
install macping /usr/bin/
install mactelnet /usr/bin/
install -d /usr/sbin
install -o root mactelnetd /usr/sbin/
install -d /etc
install -m 600 -o root config/mactelnetd.users /etc/
可以看到该程序包含nmdp、macping、mactelnet和mactelnetd四相可执行文件,另外还有一个配置文件/etc/mactelnetd.user

基本使用
mactelnetd 的使用

服务端,有两种工作模式,标准模式和TCP遂道模式
标准模式提供 telnet 服务,需要读取 /etc/mactelnetd.users 文件,该文件内以明文形式存储用户名和密码
TCP遂道模式支持以ssh协议提供服务,不需要 /etc/mactelnetd.users 文件

mactelnetd启动后,会以MNDP协议广播服务端信息,mndp工具就是接受该广播,从而获取到服务端信息的

# 标准模式
mactelnetd
## 启动守护进程,会读取/etc/mactelnetd.users中的帐号信息作为telnet的登录验证
## mactelnetd会开放5678和20561的UDP监听
# 遂道模式
mactelnetd -S
mactelnetd -S -P 22
## 启动守护进程,默认遂道至TCP 22端口,此时客户端需要以 -S 参数进行连接
## mactelnetd会开放5678和20561的UDP监听,当有ssh连接时,mactelnetd会通过127.0.0.1以tcp方式连接到ssh服务的监听端口
## mactelnet客户端会开放1962和60558的UDP监听,在建立shh连接时,会以tcp方式连接到127.0.0.1:2222端口

-n 不使用广播

mactelnet 的使用

mactelnet是客户端程序

# 服务发现,显示所有服务端
mactelnet -l
mactelnet -lB
# 以telnet方式连接到服务端
## 需要在 /etc/mactelnetd.users中添加帐号,帐号名需要系统中存在的用户,密码和系统同名帐号密码没有关系
mactelnet 0:c:29:aa:5d:73
mactelnet swarmkit1
## 会监听UDP 1928 端口
# 以ssh方式连接到服务器
## 不需要/etc/mactelnetd.users文件,使用ssh的帐号系统
mactelnet 0:c:29:aa:5d:73 -S
mactelnet 0:c:29:aa:5d:73 -S -u mcd    #指定以mcd用户登录,默认为root
## 使用ssh参数
mactelnet -S -u root 0:c:29:aa:5d:73 -- -L8080:127.0.0.1:80 -L443:127.0.0.1:8443
注意方向:与常见的是相反的
mactelnetd         ->    mactelnet
127.0.0.1:80        ->    127.0.0.1:8080
127.0.0.1:8443    ->    127.0.0.1:443

示例:

服务器(0:c:29:aa:5d:73)上安装有httpd服务,监听端口为80,并在该服务器上运行 mactelnetd -S

客户机使用mactelnet连接到服务器上,并将服务器上80商品业务映射到客户机 8080 端口:
mactelnet -S -u root 0:c:29:aa:5d:73 -- -L0.0.0.0:8080:127.0.0.1:80
mactelnet -S -u root 0:c:29:aa:5d:73 -- -L0.0.0.0:8080:127.0.0.1:80 -f -N
此时,访问客户机8080端口,即可访问到服务器上的httpd站点

可用ssh参数:
-C 允许数据压缩
-f 建立成功后在后台运行
-N 不执行远程指令
-g 允许远程主机连接主机的转发端口
macping 的使用

类似于ping命令
-f 没有发送间隔;-s 包大小byte,18-1490之间;-c 数量,0表示无限

macping 00:0c:29:aa:5d:73
0:c:29:aa:5d:73 56 byte, ping time 0.57 ms
0:c:29:aa:5d:73 56 byte, ping time 0.57 ms
0:c:29:aa:5d:73 56 byte, ping time 0.53 ms
0:c:29:aa:5d:73 56 byte, ping time 0.47 ms
0:c:29:aa:5d:73 56 byte, ping time 0.55 ms

5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 0.47/0.54/0.57 ms

nmdp 工具的使用

nmdp工具用于服务发现,可发现当前二层网络中所有的基于mac-telnet协议的服务端
可显示mac地址和设备信息(如linux主机名、内核版本、在线时间等)

mndp
Searching for MikroTik routers... Abort with CTRL+C.

MAC-Address Identity (platform version hardware) uptime
0:c:29:aa:5d:73 swarmkit1 (Linux 3.10.0-514.el7.x86_64 x86_64) MAC-Telnet up 0 days 1 hours MAC-Telnet  # 这里的时间是开机时间

命令参数

mactelnetd:

mactelnet:

macping:

mndp:

mndp没有参数,可使用 mactelnet -l 命令替代

 

 

转载请注明:轻风博客 » 利用MAC-Telnet协议进行纯二层网络通信(telnet/ssh)

喜欢 (3)or分享 (0)