通过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
原创粉丝点击