引言 ftp 工作原理 FTP 客户端思考练习 要点回顾 1 ip 地址结构 2 字节顺序转换函数 3 IP 格式转换函数 2 / 29

Similar documents
Slide 1

14A 0.1%5% 14A 14A

(Chi)_.indb

穨_2_.PDF

网络程序设计(socketAPI)

Chapter #

C6_ppt.PDF

第 2 頁 (a) 擔 任 機 場 擴 建 統 籌 辦 總 監 的 首 席 政 府 工 程 師 職 位 第 3 點 ) ; (b) 擔 任 ( 機 場 擴 建 統 籌 辦 ) 的 首 長 級 丙 級 政 務 官 職 位 ; 以 及 (c) 擔 任 總 助 理 ( 機 場 擴 建 統 籌 辦 ) 的

cgn

39898.indb

穨ecr2_c.PDF

電腦相關罪行跨部門工作小組-報告書

i

发展党员工作手册

i

中医疗法(上).doc

Slide 1

(As at 28

香 港 舞 蹈 總 會    北 京 舞 蹈 學 院

Microsoft Word - EDB Panel Paper 2016 (Chi)_finalr

二零零六年一月二十三日會議

马太亨利完整圣经注释—雅歌

厨房小知识(四)

妇女更年期保健.doc

小儿传染病防治(上)

<4D F736F F D B875B9B5A448ADFBBADEB27AA740B77EA4E2A5555FA95EAED6A641ADD75F2E646F63>

女性青春期保健(下).doc

避孕知识(下).doc

孕妇饮食调养(下).doc

禽畜饲料配制技术(一).doc

中老年保健必读(十一).doc

怎样使孩子更加聪明健康(七).doc

i

509 (ii) (iii) (iv) (v) 200, , , , C 57

尿路感染防治.doc

Microsoft Word - MP2018_Report_Chi _12Apr2012_.doc

南華大學數位論文

李天命的思考藝術

皮肤病防治.doc

性病防治

中国南北特色风味名菜 _一)

全唐诗24

心理障碍防治(下).doc

epub 33-8

網路安全:理論與實務 第二版

第五条 非公开发行股票预案应当包括以下内容:

榫 卯 是 什 麼? 何 時 開 始 應 用 於 建 築 中? 38 中 國 傳 統 建 築 的 屋 頂 有 哪 幾 種 形 式? 40 大 內 高 手 的 大 內 指 什 麼? 42 街 坊 四 鄰 的 坊 和 街 分 別 指 什 麼? 44 北 京 四 合 院 的 典 型 格 局 是 怎 樣 的

I

Simulator By SunLingxi 2003

Teaching kit_A4_part4.indd

女性减肥健身(四).doc

全唐诗28

中医疗法(下).doc

穨學前教育課程指引.PDF

眼病防治

中国南北特色风味名菜 _八)

項 訴 求 在 考 慮 到 整 體 的 財 政 承 擔 以 及 資 源 分 配 的 公 平 性 下, 政 府 採 取 了 較 簡 單 直 接 的 一 次 性 減 稅 和 增 加 免 稅 額 方 式, 以 回 應 中 產 家 庭 的 不 同 訴 求 ( 三 ) 取 消 外 傭 徵 費 6. 行 政 長

(f) (g) (h) (ii) (iii) (a) (b) (c) (d) 208

Microsoft Word - 08 单元一儿童文学理论

untitled

第三章

nb.PDF

bnbqw.PDF

南華大學數位論文

Microsoft Word 一年級散文教案.doc

米食天地教案

1. 本文首段的主要作用是 A. 指出 異蛇 的藥用功效 說明 永之人爭奔走焉 的原因 B. 突出 異蛇 的毒性 為下文 幾死者數矣 作鋪墊 C. 交代以蛇賦稅的背景 引起下文蔣氏有關捕蛇的敘述 2. 本文首段從三方面突出蛇的 異 下列哪一項不屬其中之一 A. 顏色之異 B. 動作之異 C. 毒性之

Microsoft Word - 發布版---規範_全文_.doc

概 述 随 着 中 国 高 等 教 育 数 量 扩 张 目 标 的 逐 步 实 现, 提 高 教 育 质 量 的 重 要 性 日 益 凸 显 发 布 高 校 毕 业 生 就 业 质 量 年 度 报 告, 是 高 等 学 校 建 立 健 全 就 业 状 况 反 馈 机 制 引 导 高 校 优 化 招

鱼类丰产养殖技术(二).doc

疾病诊治实务(一)

名人养生.doc

<4D F736F F D2040B9C5B871A661B0CFABC8AE61C2A7AB55ACE3A8735FA7F5ABD8BFB3B9C5B871A661B0CFABC8AE61C2A7AB55ACE3A8732E646F63>


中老年保健必读(十).doc

27 i

% % ,542 12,336 14,53 16,165 18,934 22,698 25, ,557 7,48 8,877 11, 13,732 17,283 22,

穨ecr1_c.PDF

穨2005_-c.PDF

北京理工大学.doc

尲㐵.⸮⸮⸮⸮⸮

果树高产栽培技术(一).doc

物质结构_二_.doc

第一節 研究動機與目的

水力发电(九)

Transcription:

引言 ftp 工作原理 FTP 客户端思考练习 网络程序设计 (FTP) 孙永科 西南林业大学 2010 年 9 月 17 日 1 / 29

引言 ftp 工作原理 FTP 客户端思考练习 要点回顾 1 ip 地址结构 2 字节顺序转换函数 3 IP 格式转换函数 2 / 29

引言 ftp 工作原理 FTP 客户端思考练习 本节重点 1 ftp 工作原理数据分析 TCPdump 过程分析 wireshark 过程分析 2 FTP 客户端主要过程 FTP 代码改进代码密码安全 3 思考练习 3 / 29

引言 ftp 工作原理 FTP 客户端思考练习数据分析 TCPdump 过程分析 wireshark 过程分析 FTP 工作原理 两种通信模式 1 主动 (active) 套接字 : 服务器主动把数据发给客户端 ; 2 被动 (passive) 套接字 : 服务器端将套接字配置为等待接入 ; 二者的不同在于应用程序的使用方式 ; 但是它们的创建方式是相同的 4 / 29

引言 ftp 工作原理 FTP 客户端思考练习数据分析 TCPdump 过程分析 wireshark 过程分析 active 模式通信实例 -ftp Server Client 20 21 1531 1532 data cmd cmd data 1 2 3 4 特点 两个命令端口之间的连接由客户端发起 ; 1 服务只打开固定的两个端口 20 和 21; 两个数据端口之间的连接由服务器发起 2 FTP 客户端随机开启一个大于 1024 的端口 N 向服务器的 21 号端口发起连接, 然后开放 N+1 号端口进行监听, 并向服务器发出 PORT N+1 命令 ; 3 服务器接收到命令后, 会用其本地的 FTP 数据端口 ( 通常是 20) 来连接客户端指定的端口 N+1, 进行数据传输 5 / 29

引言 ftp 工作原理 FTP 客户端思考练习数据分析 TCPdump 过程分析 wireshark 过程分析 passive 模式通信 -ftp 20 data Server 2004 data Client 21 1531 1532 cmd cmd data 1 2 3 4 特点 数据端口和命令端口之间的连接 均由客户端发起 1 服务只打开固定的端口 21; 2 FTP 库户端随机开启一个大于 1024 的端口 N 向服务器的 21 号端口发起连接, 同时会开启 N+1 号端口 3 然后向服务器发送 PASV 命令, 通知服务器自己处于被动 模式 4 服务器收到命令后, 会开放一个大于 1024 的端口 P 进行监听, 然后用 PORT P 命令通知客户端, 自己的数据端口是 P 5 客户端收到命令后, 会通过 N+1 号端口连接服务器的端口 P, 然后在两个端口之间进行数据传输 6 / 29

引言 ftp 工作原理 FTP 客户端思考练习数据分析 TCPdump 过程分析 wireshark 过程分析 数据分析工具 1 tcpdump prints out a description of the contents of packets on a network interface that match the boolean expression tcpdump [ -AdDefIKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count ] [ -C file_size ] [ -G rotate_seconds ] [ -F file ] [ -i interface ] [ -m module ] [ -M secret ] [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ] [ -W filecount ] [ -E spi@ipaddr algo:secret, ] [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ] [ expression ] 2 wireshark Wireshark is a GUI network protocol analyzer It lets you interactively browse packet data from a live network or from a previously saved capture file Wireshark s native capture file format is libpcap format, which is also the format used by tcpdump and various other tools 7 / 29

引言 ftp 工作原理 FTP 客户端思考练习数据分析 TCPdump 过程分析 wireshark 过程分析 TCPdump tcpdump 提供了很多的命令选项, 在这里我只简单介绍几个 : -A 将每个数据包以美国信息互换标准代码 ASCII 的格式打印出来 -c N 如果这个 N 是一个数字, 这个选项表示 tcpdump 将在 N 个数据包后退 出 -i interface 捕获指定网络端口的数据包 -n 不将地址进行解析 -q 提供较少的 ( 安静 ) 输出, 这样的输出路线会比较短 -r filename( 文件名 ): 从指定的文件而不是网络端口读取数据包 它经常用 在数据已经被记录到文件中的情况, 需要和 -w 的选项共同使用 -t 在输出每一行的时间不打印时间戳 -v 提供更详细的输出 V 可以增加, 象 -VV 甚至 -VVV -w filename( 文件名 ) 将数据包写到指定的文件中 Example 1 sudo tcpdump -ANntKlus0q 2 sudo tcpdump -ANntKlus0q -ieth0 8 / 29

引言 ftp 工作原理 FTP 客户端思考练习数据分析 TCPdump 过程分析 wireshark 过程分析 过程分析 1 16:35:47957917 IP 19216803851449 > 2181941069121: Flags [S], seq 3187462765, win 5840, op 2 tions [mss 1460,sackOK,TS val 4085830 ecr 0, nop,wscale 6], length 0 3 E<+@@&j[myG 4 >XF 8 16:35:48007860 IP 2181941069121 > 19216803851449: Flags [P], seq 290:323, ack 53, win 65483, options [nop, nop,ts val 14993194 ecr 4085842], length 33 9 EU @j[& 10 *>XR200 MLST OPTS Type;Size;Modify; 9 / 29

引言 ftp 工作原理 FTP 客户端思考练习数据分析 TCPdump 过程分析 wireshark 过程分析 过程分析 1 16:35:47957917 IP 19216803851449 > 2181941069121: Flags [S], seq 3187462765, win 5840, op 2 tions [mss 1460,sackOK,TS val 4085830 ecr 0,nop,wscale 6], length 0 3 E<+@@&j[myG 4 >XF 6 16:35:48007860 IP 2181941069121 > 19216803851449: Flags [P], seq 290:323, ack 53, win 65483, options [nop,nop,ts val 14993194 ecr 4085842], length 33 7 EU @j[& 8 *>XR200 MLST OPTS Type;Size;Modify; 10 16:35:48008142 IP 19216803851449 > 2181941069121: Flags [P], seq 53:67, ack 323, win 108, options [nop,nop,ts val 4085843 ecr 14993194], length 14 11 EB3@@&j[l! 12 >XS*USER jkxjxxz 14 16:35:48009464 IP 2181941069121 > 19216803851449: Flags [P], seq 323:359, ack 67, win 65469, options [nop,nop,ts val 14993195 ecr 4085843], length 36 15 EX @j[&b 16 +>XS331 User name okay, need password 18 16:35:48009811 IP 19216803851449 > 2181941069121: Flags [P], seq 67:80, ack 359, win 108, options [nop,nop,ts val 4085843 ecr 14993195], length 13 19 EA4@@&j[<l 20 >XS+PASS swfcxs 10 / 29

引言 ftp 工作原理 FTP 客户端思考练习数据分析 TCPdump 过程分析 wireshark 过程分析 wireshark 11 / 29

引言 ftp 工作原理 FTP 客户端思考练习数据分析 TCPdump 过程分析 wireshark 过程分析 12 / 29

引言 ftp 工作原理 FTP 客户端思考练习数据分析 TCPdump 过程分析 wireshark 过程分析 13 / 29

引言 ftp 工作原理 FTP 客户端思考练习主要过程 FTP 代码改进代码密码安全 过程总结 14 / 29

引言 ftp 工作原理 FTP 客户端思考练习主要过程 FTP 代码改进代码密码安全 FTP 过程 15 / 29

引言 ftp 工作原理 FTP 客户端思考练习主要过程 FTP 代码改进代码密码安全 FTP 代码 I 1 #include <stdioh> 2 #include <stdlibh> 3 #include <errnoh> 4 #include <sys/socketh> 5 #include <sys/ioctlh> 6 #include <netinet/inh> 7 #include <netdbh> 8 #include <stringh> 9 #include <signalh> 10 #include <sys/timeh> 11 #include <pollh> 12 #define SERVER_PORT 21 /* 服务器端口号 */ 13 #define MAXBUFSIZE 1024 /* 发送和接收缓存的最大长度 */ 15 char buff[maxbufsize]; /* 发送和接收缓存 */ 16 int main(int argc, char *argv[]) 17 { 18 int sockfd=0; /* 插口描述符 */ 19 struct sockaddr_in serveraddr; /* 服务器地址 */ 20 int mode=0; /* 阻塞模式 */ 22 if (argc <2) 23 { 24 printf( 使用方法 :tcp_client <server_ip_address>\n ); 25 exit(0); 26 } 27 for(;;) /* 循环等待连接成功 */ 28 { 29 /* 产生 TCP 插口 */ 16 / 29

引言 ftp 工作原理 FTP 客户端思考练习主要过程 FTP 代码改进代码密码安全 FTP 代码 II 30 if ((sockfd = socket(af_inet, SOCK_STREAM, 0)) < 0) 31 { 32 printf( 产生插口失败, 退出 \n ); 33 exit(1); 34 } 35 /* 填写服务器地址结构 */ 36 bzero((char *) &serveraddr, sizeof(struct sockaddr_in)); 37 serveraddrsin_family = AF_INET; 38 serveraddrsin_port = htons(server_port); 39 inet_aton(argv[1], &serveraddrsin_addr); 40 /* 发起连接请求 */ 41 if (connect(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) < 0) 42 { 43 printf( 连接请求失败 : errno=%d\n,errno); 44 close(sockfd); /* 重新建连, 必须重新产生新插口, 关闭原插口 */ 45 } 46 else{ 47 printf( 连接成功 \n ); 48 break; 49 } 50 } 52 while(1) 53 { 54 bzero(buff, sizeof(buff)); 56 if(recv(sockfd, buff, MAXBUFSIZE, 0)<=0) 57 { 58 printf( 接收失败, 程序退出, errno=%d\n,errno); 59 close(sockfd); 17 / 29

引言 ftp 工作原理 FTP 客户端思考练习主要过程 FTP 代码改进代码密码安全 FTP 代码 III 60 exit(2); 61 }else{ 62 printf( [%s]:%s\n,argv[1],buff); 64 } 65 printf( please input:\n ); 66 //bzero(buff, sizeof(buff)); 67 fgets(buff,sizeof(buff),stdin); 68 if (send(sockfd, buff, strlen(buff), 0) <= 0) 69 { 70 printf( 发送失败, 程序退出, errno=%d\n,errno); 71 close(sockfd); 72 exit(1); 73 } 74 } 75 close(sockfd); 76 return 1; 77 } $ /ftpclient 202203132241 连接成功 [202203132241]:220 Serv-U FTP Server v64 for WinSock ready Please input: USER syk // 程序在此卡住, 出现错误 18 / 29

引言 ftp 工作原理 FTP 客户端思考练习主要过程 FTP 代码改进代码密码安全 问题分析 正常的数据包 出错的数据包 解析 1 使用网络服务必须遵守协议规范 2 协议规范查看 RFC 文档 3 不公开的协议可以使用协议分析工具进行分析 19 / 29

引言 ftp 工作原理 FTP 客户端思考练习主要过程 FTP 代码改进代码密码安全 改进代码 printf( Please intpu:\n ); fgets(buff,sizeof(buff),stdin); strcat(buff, \r\n ); if (send(sockfd, buff, strlen(buff), 0) <= 0) 20 / 29

引言 ftp 工作原理 FTP 客户端思考练习主要过程 FTP 代码改进代码密码安全 密码找回 I 在知道用户名的情况下, 可以通过穷举的方法找回遗忘的密码, 即把有可能的密码都测试一遍 1 #include <stdioh> 2 #include <stdlibh> 3 #include <errnoh> 4 #include <sys/socketh> 5 #include <sys/ioctlh> 6 #include <netinet/inh> 7 #include <netdbh> 8 #include <stringh> 9 #include <signalh> 10 #include <sys/timeh> 11 #include <pollh> 12 /* 服务器端口号 */ 13 #define SERVER_PORT 21 21 / 29

引言 ftp 工作原理 FTP 客户端思考练习主要过程 FTP 代码改进代码密码安全 密码找回 II 14 /* 发送和接收缓存的最大长度 */ 15 #define MAXBUFSIZE 1024 17 char buff[maxbufsize]; /* 发送和接收缓存 */ 18 int main(int argc, char *argv[]){ 19 int sockfd=0; // 插口描述符 20 // 服务器地址 21 struct sockaddr_in serveraddr; 22 char PWD[50]; 24 if (argc <3){ 25 printf( 使用方法 :tcp_client < server_ip_address> <username>\n ); 26 exit(0); 27 } 28 for(;;){ /* 循环等待连接成功 */ 22 / 29

引言 ftp 工作原理 FTP 客户端思考练习主要过程 FTP 代码改进代码密码安全 密码找回 III 30 /* 产生 TCP 插口 */ 31 if ((sockfd = socket(af_inet, SOCK_STREAM, 0)) < 0){ 32 printf( 产生插口失败, 退出 \n ); 33 exit(1); 34 } 35 /* 填写服务器地址结构 */ 36 bzero((char *) &serveraddr, sizeof(struct sockaddr_in)); 37 serveraddrsin_family = AF_INET; 38 serveraddrsin_port = htons( SERVER_PORT); 39 inet_aton(argv[1], &serveraddrsin_addr); 40 /* 发起连接请求 */ 23 / 29

引言 ftp 工作原理 FTP 客户端思考练习主要过程 FTP 代码改进代码密码安全 密码找回 IV 41 if (connect(sockfd, (struct sockaddr *)& serveraddr, sizeof(serveraddr)) < 0){ 42 printf( 连接请求失败 : errno=%d\n,errno); 43 /* 重新建连, 必须重新产生新插口, 关闭原插口 */ 44 close(sockfd); 45 } 46 else{ 47 printf( 连接成功 \n ); 48 break; 49 } 50 } 52 while(1){ 53 bzero(buff, sizeof(buff)); 54 if(recv(sockfd, buff, MAXBUFSIZE, 0)<=0){ 24 / 29

引言 ftp 工作原理 FTP 客户端思考练习主要过程 FTP 代码改进代码密码安全 密码找回 V 55 printf( 接收失败, 程序退 出, errno=%d\n,errno); 56 close(sockfd); 57 exit(2); 58 } 59 printf( [%s]:%s\n,argv[1],buff); 61 if((strstr(buff, 220 ) buff)==0){ 62 // 登录成功, 输入用户名 63 sprintf(buff, USER %s\r\n,argv[2]); 64 } 65 else if((strstr(buff, 331 ) buff)==0){ 66 // 用户名验证通过, 输入密码 67 printf( please input the password: ); 68 fgets(pwd,sizeof(pwd),stdin); 69 sprintf(buff, PASS %s\r\n,pwd); 25 / 29

引言 ftp 工作原理 FTP 客户端思考练习主要过程 FTP 代码改进代码密码安全 密码找回 VI 70 } 71 else if((strstr(buff, 230 ) buff)==0){ 72 // 密码验证通过打印用户密码, 73 printf( the password is %s\n,pwd); 74 close(sockfd); 75 exit(0); 77 } 78 else if((strstr(buff, 530 ) buff)==0){ 79 // 验证失败, 重新开始验证 80 sprintf(buff, USER %s\r\n,argv[2]); 81 } 83 if (send(sockfd, buff, strlen(buff), 0) <= 0){ 26 / 29

引言 ftp 工作原理 FTP 客户端思考练习主要过程 FTP 代码改进代码密码安全 密码找回 VII 84 printf( 发送失败, 程序退 出, errno=%d\n,errno); 85 close(sockfd); 86 exit(1); 87 } 88 } 89 close(sockfd); 90 return 1; 91 } 27 / 29

讨论 引言 ftp 工作原理 FTP 客户端思考练习主要过程 FTP 代码改进代码密码安全 1 如何加快测试的速度 2 错误次数的限制问题 3 连接次数的限制问题 28 / 29

引言 ftp 工作原理 FTP 客户端思考练习 思考练习 1 连接 FTP 需要进行那些操作 2 active 与 passive 的区别 3 wireshark 如何捕获邮件的用户名 4 wireshark 捕获特定的数据 29 / 29