通过ssh通道加密通信数据
来源:互联网 发布:ios 监控软件 编辑:程序博客网 时间:2024/06/05 06:07
ssh数据加密是非常棒的,先来个如何进行加密的示意图。
图.1
开启ssh服务(ubuntu):
#/etc/init.d/ssh start
查看ssh 服务状态:
图.2
执行:
#ssh -L 6000:127.0.0.1:8888 -N 127.0.0.1 // 注意,这里第一个ip是回环地址,第二个应该是远程的地址,这里用于测试。6000是sshPort,8888是serPort#netstat -tnlp | grep ssh
图.3
可以看到,ssh客户端开启了一个监听,监听的端口号是6000,那么接下来我们的client只需要去连接6000端口了。
那为什么有个37344 <--> 22的连接呢?那是因为ssh客户端创建出一个进程或者线程和sshd连接,给第三方应用通信,父进程依然在等待新的第三方程序的请求。
下面是server 和 client 的测试代码:
/*Server.c*/#include <stdio.h>#include <arpa/inet.h>#include <unistd.h>#include <stdlib.h>#include <sys/socket.h>#include <string.h>int main(int argc, char *argv[]){int sock = socket(AF_INET, SOCK_STREAM, 0);if (sock < 0)write(STDERR_FILENO, "socket error", 11);struct sockaddr_in addr;memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET;addr.sin_port = htons(8888);addr.sin_addr.s_addr = inet_addr("127.0.0.1");bind(sock, (struct sockaddr *)&addr, sizeof(addr));listen(sock, 32767);int connfd = accept(sock, NULL, NULL);write(connfd, "You connect success.\n", 21);sleep(10000);close(connfd);close(sock);return 0;}
/*Client.c*/#include <unistd.h>#include <sys/socket.h>#include <sys/types.h>#include <stdio.h>#include <string.h>#include <arpa/inet.h>int main(int argc, char *argv[]){int sock = socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in addr;memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET;addr.sin_port = htons(6000);addr.sin_addr.s_addr = inet_addr("127.0.0.1");connect(sock, (struct sockaddr *)&addr, sizeof(addr));char buf[512];memset(buf, 0, sizeof(buf));//printf("sizeof(buf):%d\n", sizeof(buf));read(sock, buf, 512);write(STDOUT_FILENO, buf, strlen(buf));sleep(10000);close(sock);return 0;}
在开启server 和 client之前,我们先用tcpdump监听端口,这里我们应该选择37344端口监听!同时选择的是回环设备。
注意,不是8888 或者 6000端口,为什么?因为在连接37344 <--> 22之间的数据才是加密的(看图1理解)。
图.4
开启server 和 client.
#./server#./client
图.5
可以看到客户端返回了正确数据,再来看看tcpdump的输出。
18:34:15.538916 IP 127.0.0.1.37344 > 127.0.0.1.22: Flags [P.], seq 3506275179:3506275271, ack 3174401501, win 386, options [nop,nop,TS val 3634369 ecr 3502811], length 920x0000: 4510 0090 160a 4000 4006 264c 7f00 0001 E.....@.@.&L....0x0010: 7f00 0001 91e0 0016 d0fd 836b bd35 85dd ...........k.5..0x0020: 8018 0182 fe84 0000 0101 080a 0037 74c1 .............7t.0x0030: 0035 72db 97e4 2ffd 23df c0c5 eeb7 bbb4 .5r.../.#.......0x0040: 08de fa22 eb43 2d58 6074 1e51 cb07 b193 ...".C-X`t.Q....0x0050: 0d93 5f38 c3b3 9846 a859 0c14 1b3d 9884 .._8...F.Y...=..0x0060: b1f5 ce8a 89c1 2567 d17e 58ae 3f54 d043 ......%g.~X.?T.C0x0070: bccf e4b4 1f13 6717 c45f d0ac 7075 3d0e ......g.._..pu=.0x0080: d387 c803 3ca1 f939 eabc f10c c01d 672c ....<..9......g,18:34:15.538954 IP 127.0.0.1.22 > 127.0.0.1.37344: Flags [.], ack 92, win 1365, options [nop,nop,TS val 3634369 ecr 3634369], length 00x0000: 4500 0034 1325 4000 4006 299d 7f00 0001 E..4.%@.@.).....0x0010: 7f00 0001 0016 91e0 bd35 85dd d0fd 83c7 .........5......0x0020: 8010 0555 fe28 0000 0101 080a 0037 74c1 ...U.(.......7t.0x0030: 0037 74c1 .7t.18:34:15.539218 IP 127.0.0.1.22 > 127.0.0.1.37344: Flags [P.], seq 1:45, ack 92, win 1365, options [nop,nop,TS val 3634369 ecr 3634369], length 440x0000: 4500 0060 1326 4000 4006 2970 7f00 0001 E..`.&@.@.)p....0x0010: 7f00 0001 0016 91e0 bd35 85dd d0fd 83c7 .........5......0x0020: 8018 0555 fe54 0000 0101 080a 0037 74c1 ...U.T.......7t.0x0030: 0037 74c1 ba76 018f 3cfd 88c1 79e0 3756 .7t..v..<...y.7V0x0040: 473b 6839 a577 62e1 7a67 6e4b 03cb 3a94 G;h9.wb.zgnK..:.0x0050: 6c5c e89f 7bbc 734a bc7e b343 1e9d d063 l\..{.sJ.~.C...c18:34:15.539230 IP 127.0.0.1.37344 > 127.0.0.1.22: Flags [.], ack 45, win 386, options [nop,nop,TS val 3634369 ecr 3634369], length 00x0000: 4510 0034 160b 4000 4006 26a7 7f00 0001 <span style="color:#CC0000;">E..4..@.@.&.....</span>0x0010: 7f00 0001 91e0 0016 d0fd 83c7 bd35 8609 <span style="color:#CC0000;">.............5..</span>0x0020: 8010 0182 fe28 0000 0101 080a 0037 74c1 <span style="color:#CC0000;">.....(.......7t.</span>0x0030: 0037 74c1 <span style="color:#CC0000;">.7t.</span>其中,前三个捕获是tcp的三次握手过程。
最后一次是传输的数据,如果不采用ssh 加密,那么可以看到红色部分是明文You connect success.(上面的<span style .. . . . > </span>部分)
或者用tcpdump监听8888和6000均是明文。
SSH加密到此结束。
1 0
- 通过ssh通道加密通信数据
- SSH加密通道配置
- SSH加密通道配置
- SSH:加密传输 远程管理的安全通道
- VNC通过putty加密通道连接VNCserver
- 通过SSH通道来访问MySQL
- mysql 通过ssh通道安全连接数据库
- 通过SSH通道穿越防火墙访问内网的机器!
- 通过ssh-keygen打通两台主机间通道
- 通过ssh通道实现linux登陆远程linux桌面
- ssh隧道来加密连接的通信
- 通过非对称加密简化SSH登录
- 通过RC4加密解密数据
- 两台主机通过SSH通信
- 通过ssh同步git数据
- WebRTC实时通信系列教程9 数据通道图片传输
- oracle数据ORA-03113:通信通道的文件到达结尾
- 数据通道
- 使用PHP创建SOCKET服务
- LeetCode 119 Pascal's Triangle II
- 指令集
- Cin 深入剖析
- Android 源码 listview 重用机制 浅析
- 通过ssh通道加密通信数据
- Javascript笔记《一》之解析与执行
- 像bootstrap一样的去做web编程
- 对hadoop的一些命令总结
- MPEG(运动图像专家组)是 Motion Picture Experts Group 的缩写
- java.lang.UnsupportedOperationException: Can't convert to dimension: type=0x1
- unity for Vuforia5.5.9 遇到的问题
- Atitit.android播放smb 网络邻居视频文件解决方案
- Failed to add uid rule (Invalid argument)