Windows网络编程 第2版 课件 第6章 数据报套接字编程_第1页
Windows网络编程 第2版 课件 第6章 数据报套接字编程_第2页
Windows网络编程 第2版 课件 第6章 数据报套接字编程_第3页
Windows网络编程 第2版 课件 第6章 数据报套接字编程_第4页
Windows网络编程 第2版 课件 第6章 数据报套接字编程_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

网络编程技术partPython网络编程基本框架6Python基本使用Python基本语法Python网络编程基本框架本讲要点目录/ContentsPython简介Python基本语法Python网络编程接口一、Python简介1989年圣诞节期间,作为Python之父的吉多·范罗苏姆,为了打发圣诞节的无趣,决心开发一个新语言解释器,这个语言就是当下最流行的语言之一——Python。结合了解释性、编译性、互动性和面向对象的脚本语言。应用领域Web和Internet开发,科学计算和统计,人工智能,桌面界面开发,软件开发,后端开发,网络爬虫。具体程序代码一、Python简介一、Python简介一、Python简介目录/ContentsPython简介Python基本语法Python网络编程接口二、Python基本语法(一)编码默认情况下,Python3源码文件以

UTF-8

编码,所有字符串都是Unicode字符串。(二)标识符1第一个字符必须是字母表中字母或下划线

_

。2标识符的其他的部分由字母、数字和下划线组成。3标识符对大小写敏感。注意在Python3中,可以用中文作为变量名,非ASCII标识符也是允许的了。(三)保留字FalseassertcontinueexceptifnonlocalreturnNoneasyncdeffinallyimportnottryTrueawaitdelforinorwhileandbreakeliffromispasswithasclasselsegloballambdaraiseyield二、Python基本语法(四)行与缩进1Python最具特色的就是使用缩进来表示代码块,不需要使用大括号{}。2缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。(五)多个语句构成代码组1缩进相同的一组语句构成一个代码块,我们称之代码组。2像if、while、def和class这样的复合语句,首行以关键字开始,以冒号(:)结束,该行之后的一行或多行代码构成代码组。3我们将首行及后面的代码组称为一个子句(clause)。二、Python基本语法(六)多行语句Python通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠(\)来实现多行语句,在{},[],或()中的多行语句,不需要使用反斜杠(\)。(七)同一行显示多条语句Python可以在同一行中使用多条语句,语句之间使用分号(;)分割。(八)注释1单行注释以

#

开头。2多行注释可以用多个

#

号,还可以用成对的三个单引号'''

或者三个双引号

"""。二、Python基本语法(九)import与from...import在Python中用

import或者from...import来导入相应的模块。1将整个模块(somemodule)导入,格式为:importsomemodule2从某个模块中导入某个函数,格式为:fromsomemoduleimportsomefunction二、Python基本语法在Python中用

import或者from...import来导入相应的模块。3从某个模块中导入多个函数,格式为:fromsomemoduleimportfirstfunc,secondfunc,thirdfunc4将某个模块中的全部函数导入,格式为:fromsomemoduleimport*二、Python基本语法(九)import与from...import(十)数字(Number)类型Python中数字有四种类型:整数、布尔型、浮点数和复数。int(整数),如1,只有一种整数类型int,表示为长整型,没有python2中的Long。bool(布尔),如True。float(浮点数),如1.23、3E-2。complex(复数),如1+2j、1.1+2.2j。二、Python基本语法(十一)字符串(String)1Python中单引号和双引号使用完全相同。2使用三个引号('''或""")可以指定一个多行字符串。3转义符'\',反斜杠可以用来转义,使用r可以让反斜杠不发生转义。如:r"thisisalinewith\n"则\n会显示,并不是换行。4按字面意义级联字符串,如"this""is""string"会被自动转换为thisisstring。5字符串可以用+运算符连接在一起,用*运算符重复。二、Python基本语法6Python中的字符串有两种索引方式,从左往右以0开始,从右往左以-1开始。7Python中的字符串不能改变。8Python没有单独的字符类型,一个字符就是长度为1的字符串。9字符串的截取的语法格式如下:变量[头下标:尾下标:步长]二、Python基本语法(十一)字符串(String)目录/ContentsPython简介Python基本语法Python网络编程接口三、Python网络编程接口Python提供了两种级别访问的网络服务:低级别的网络服务,支持基本的Socket,它提供了标准的BSDSocketsAPI,可以访问底层操作系统Socket接口的全部方法。高级别的网络服务模块SocketServer,它提供了服务器中心类,可以简化网络服务器的开发。协议功能用处端口号Python模块HTTP网页访问80httplib,urllib,xmlrpclibNNTP阅读和张贴新闻文章,俗称为"帖子"119nntplibFTP文件传输20ftplib,urllibSMTP发送邮件25smtplibPOP3接收邮件110poplibIMAP4获取邮件143imaplibTelnet命令行23telnetlibGopher信息查找70gopherlib,urllibPython提供了两种级别访问的网络服务:三、Python网络编程接口(一)socket()函数Python中,我们用socket()函数来创建套接字,语法格式如下:socket.socket([family[,type[,proto]]])参数family:套接字家族可以使AF_UNIX或者AF_INET。type:套接字类型可以根据是面向连接的还是非连接分为SOCK_STREAM或SOCK_DGRAM。protocol:一般不填默认为0。三、Python网络编程接口三、Python网络编程接口——Socket对象(内建)方法(二)服务器端套接字函数函数描述s.bind()绑定地址(host,port)到套接字,在AF_INET下,以元组(host,port)的形式表示地址。s.listen()开始TCP监听。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了。s.accept()被动接受TCP客户端连接,(阻塞式)等待连接的到来(三)客户端套接字函数函数描述s.connect()主动初始化与TCP服务器连接,一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。s.connect_ex()connect()函数的扩展版本,出错时返回出错码,而不是抛出异常。三、Python网络编程接口——Socket对象(内建)方法(四)公共用途的套接字函数函数描述s.recv()接收TCP数据,数据以字符串形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他信息,通常可以忽略。s.send()发送TCP数据,将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。s.sendall()完整发送TCP数据。将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。s.recvfrom()接收UDP数据,与recv()类似,但返回值是(data,address)。其中data是包含接收数据的字符串,address是发送数据的套接字地址。s.sendto()发送UDP数据,将数据发送到套接字,address是形式为(ipaddr,port)的元组,指定远程地址。返回值是发送的字节数。s.close()关闭套接字三、Python网络编程接口——代码分析(五)服务器端程序代码#!/usr/bin/python

#-*-coding:UTF-8-*-import

socket

#导入socket模块s=socket.socket()

#创建socket对象

host=socket.gethostname()

#获取本地主机名

port=12345

#设置端口

s.bind((host,port))

#绑定端口

s.listen(5)

#等待客户端连接

while

True:

c,addr=s.accept()

#建立客户端连接

print('连接地址:’,addr)

c.send('欢迎访问服务器!’.encode())

c.close()

#关闭连接(六)客户端程序代码#!/usr/bin/python

#-*-coding:UTF-8-*-import

socket

#导入socket模块

s=socket.socket()

#创建socket对象

host=socket.gethostname()

#获取本地主机名

port=12345

#设置端口号

s.connect((host,port))

print(s.recv(1024).decode())s.close()三、Python网络编程接口——代码分析课后实践结合本次课提供的代码,动手实现基于Python的客户/服务器网络应用程序。实践题网络编程技术6.2.1Scapy基本网络

数据收发功能29本讲要点:1.Scapy的安装2.Scapy的使用3.Scapy的基本函数010203Python的安装Python的使用Python的基本函数目录/Contents一、Scapy的安装安装:BundleContainsPipcommandDefaultOnlyScapypip

install

scapyBasicScapy&IPython.

Highlyrecommendedpip

install

--pre

scapy[basic]CompleteScapy&allitsmaindependenciespip

install

--pre

scapy[complete]参考资料:1.https://scapy.readthedocs.io/en/latest/2./scapy/index.html(中文)3./scapy/building-network-tools010203Python的安装Python的使用Python的基本函数目录/Contents二、Scapy的使用命令行:二、Scapy的使用代码调用:InScapyv2usefromscapy.allimport*insteadoffromscapyimport*010203Python的安装Python的使用Python的基本函数目录/Contents三、Scapy的基本函数构造网络数据包:构造单一特定协议数据包:Ether(),IP(),

TCP(),

UDP()。将不同层的协议数据包连接起来,操作符“/”。构造一组数据包:a=IP(ttl=10)Ether()/IP()/TCP()/"GET/HTTP/1.0\r\n\r\n"a=IP(dst="/30")b=IP(ttl=[1,2,(5,9)])三、Scapy的基本函数数据包分析:单个数据包:函数描述raw(pkt)assemblethepackethexdump(pkt)haveahexadecimaldumpls(pkt)havethelistoffieldsvaluespkt.summary()foraone-linesummarypkt.show()foradevelopedviewofthepacketpkt.show2()sameasshowbutontheassembledpacket(checksumiscalculated,forinstance)pkt.sprintf()fillsaformatstringwithfieldsvaluesofthepacketpkt.decode_payload_as()changesthewaythepayloadisdecodedpkt.psdump()drawsaPostScriptdiagramwithexplaineddissectionpkt.pdfdump()drawsaPDFwithexplaineddissectionmand()returnaScapycommandthatcangeneratethepacket三、Scapy的基本函数数据包分析:一组数据包:函数描述summary()displaysalistofsummariesofeachpacketnsummary()sameasprevious,withthepacketnumberconversations()displaysagraphofconversationsshow()displaysthepreferredrepresentation(usuallynsummary())filter()returnsapacketlistfilteredwithalambdafunctionhexdump()returnsahexdumpofallpacketshexraw()returnsahexdumpoftheRawlayerofallpacketspadding()returnsahexdumpofpacketswithpaddingnzpadding()returnsahexdumpofpacketswithnon-zeropaddingplot()plotsalambdafunctionappliedtothepacketlistmaketable()displaysatableaccordingtoalambdafunction三、Scapy的基本函数发送接收网络数据包:发送网络数据包:send(),sendp()send(IP(dst="")/ICMP())sendp(Ether()/IP(dst="",ttl=(1,4)),iface="eth1")网络层数据链路层三、Scapy的基本函数发送接收网络数据包:发送接收网络数据包:sr(),sr1(),srp()

sr1(IP(dst="")/ICMP()/"XXXXXXXXXXX")sr(IP(dst="")/TCP(dport=[21,22,23]),inter=0.5,retry=2,timeout=1)

课后实践实践题:练习运用本次课所介绍的基本函数,并结合wireshark工具对网络流量进行抓取分析。网络编程技术6.2.2Scapy高级网络功能43本讲要点:1.SYN端口扫描2.TCP路由跟踪3.网络嗅探4.网络数据的导入与导出5.网络数据包内容的查看与提取6.被动操作系统识别一、SYNscanning实现典型的SYNScanning:sr1(IP(dst="9")/TCP(dport=80,flags="S"))

二、TCPtraceroute对目标IP地址进行路由跟踪。ans,unans=sr(IP(dst=target,ttl=(4,25),id=RandShort())/TCP(flags=0x2))相关函数:traceroute()三、Sniffing对特定网络接口进行数据嗅探。使用conf.iface查看当前计算机正在使用的网卡,以及通过赋值操作设置要使用的网卡。sniff(iface="wifi0",filter="icmpandhost51",count=2,prn=lambdax:x.summary())备选:ipconfig/all四、网络数据的导入与导出保存为PCAP文件。读取PCAP文件。wrpcap("temp.cap",pkts)(2)pkts=sniff(offline="temp.cap")(1)pkts=rdpcap("temp.cap")五、网络数据包内容的查看与提取packet.show()hasattr(i,“load")getattr(i,“load")Python内置函数六、PassiveOSFingerprinting通过嗅探,被动地对发送网络数据包的计算机操作系统进行探测。>>>load_module("p0f")>>>p0f(p)课后实践实践题:练习运用本次课所介绍的具体函数。网络编程技术6.3.1基于Scapy的端口扫描52本讲要点:常见的端口扫描方法基本的端口扫描实现常见端口扫描方法TCPConnectScanSYN+PORTSYN+ACKRST+ACK端口处于打开状态客户端服务器SYN+PORTRST端口处于关闭状态客户端服务器常见端口扫描方法TCPStealthScanSYN+PORTSYN+ACKRST端口处于打开状态客户端服务器常见端口扫描方法TCPStealthScanSYN+PORTRST端口处于关闭状态客户端服务器常见端口扫描方法XMASScanFlags(PSH,FIN,URG)+PORTNoResponse客户端服务器端口处于打开状态常见端口扫描方法XMASScanFlags(PSH,FIN,URG)+PORTRST客户端服务器端口处于关闭状态常见端口扫描方法XMASScanFlags(PSH,FIN,URG)+PORTICMPERROR(Type3,Code1,2,3,9,10,or13)客户端服务器端口已被过滤掉常见端口扫描方法FINScanFlags(FIN)+PORTNoResponse客户端服务器端口处于打开状态常见端口扫描方法FINScanFlags(FIN)+PORTRST客户端服务器端口处于关闭状态常见端口扫描方法FINScanFlags(FIN)+PORTICMPERROR(Type3,Code1,2,3,9,10,or13)客户端服务器端口已被过滤掉常见端口扫描方法NULLScanNoResponse客户端服务器端口处于打开状态NoFlag+PORT常见端口扫描方法NULLScanNoFlag+PORTRST客户端服务器端口处于关闭状态常见端口扫描方法NULLScanNoFlag+PORTICMPERROR(Type3,Code1,2,3,9,10,or13)客户端服务器端口已被过滤掉TCPStealthScan编程实现#!/usr/bin/envpython3

importrandom

fromscapy.allimportICMP,IP,sr1,TCP#DefineendhostandTCPportrange

host=""

port_range=[22,23,80,443,3389]#SendSYNwithrandomSrcPortforeachDstport

fordst_portinport_range:

src_port=random.r

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论