版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux系统自动化运维(Python版)(微课版)工业和信息化精品系列教材项目7
网络管理和网络安全人民邮电出版社能力CAPACITY要求学会使用Python编程实现IP地址管理和DNS解析。了解nmap工具和python-nmap库的基本用法。学会使用Python编程实现网络探测和安全扫描。熟悉Scapy的基本用法,学会使用Python编程处理底层的网络数据包。任务7.2实现网络探测和安全扫描任务7.1IP地址管理与DNS解析任务7.3使用Scapy库处理网络数据包任务7.1IP地址管理与DNS解析任务说明01OPTION02OPTION03OPTION了解IPy库及其基本用法了解dnspython库及其基本用法学会使用Python编程计算和解析IP地址04OPTION学会使用Python编程解析DNS记录任务7.1IP地址管理与DNS解析相关知识7.1.1IPy库及其基本用法安装IPy库pipinstallipy处理IP地址和网络>>>fromIPyimportIP #导入IP类>>>IP('') #字符串表示的IP地址IP('')>>>IP(0xc0a80182) #十六进制数表示的IP地址IP('30')>>>IP('::ffff:') #IPv6地址IP('::ffff:')>>>IP('/') #子网掩码表示的网络地址IP('/24')>>>IP('/16') #前缀长度表示的IP网络地址IP('/16')>>>IP('1/',make_net=True) #基于前缀长度生成IP网络地址IP('/24')>>>IP("-3",make_net=True) #基于IP地址范围生成网络地址IP('/26')任务7.1IP地址管理与DNS解析相关知识7.1.1IPy库及其基本用法生成网络地址>>>IP('').make_net('')IP('/24')>>>IP("/24",make_net=True)IP('/24')子网合并>>>IPSet([IP('/24'),IP('/24')])IPSet([IP('/23')])任务7.1IP地址管理与DNS解析相关知识7.1.2dnspython库及其基本用法dnspython库之前先执行以下命令安装它。pipinstalldnspython域名查询用法dns.resolver.resolve(qname:str,rdtype:int|str=0,rdclass:int|str=0,tcp:bool=False,source:Any=None,raise_on_no_answer:bool=True,source_port:int=0)任务7.1IP地址管理与DNS解析任务实现任务7.1.1使用IPy库解析IP地址fromIPyimportIPwhileTrue:ip_inp=input('请输入IP地址或网络地址(输入"q"退出):’)┈┈┈iflen(ips)>1:#IP地址个数大于1print('网络地址:%s'%())print('子网掩码:%s'%mask())print('前缀长度:%s'%ips.prefixlen())print('广播地址:%s'%ips.broadcast())print('反向解析地址:%s'%ips.reverseNames()[0])print('子网IP地址数:%s'%len(ips))else:#单个IP地址的情形
print('反向解析地址:%s'%ips.reverseName())print('整数形式:%s'%())print('十六进制形式:%s'%ips.strHex())print('二进制形式:%s'%ips.strBin())print('IP地址类型:%s'%ips.iptype())任务7.1IP地址管理与DNS解析任务实现任务7.1.2使用dnspython库解析DNS记录importdns.resolverwhileTrue:domain=input('请输入要解析的域名(输入"q"退出):')ifdomain=='q':breakprint('*******主机记录解析*********')try:A=dns.resolver.resolve(domain,'A')#解析类型为A记录
forminA.response.answer:forninm.items:#通过判断排除没有IP地址的CNAME对象
ifn.rdtype==1:print('IP地址:',n.address)exceptExceptionase:print(e)
任务7.1IP地址管理与DNS解析任务实现任务7.1.2使用dnspython库解析DNS记录print('*******别名记录解析*********')try:CNAME=dns.resolver.resolve(domain,'CNAME')#解析类型为CNAME记录
forminCNAME.response.answer:forninm.items:print('别名:',n.to_text())exceptExceptionase:print(e)print('*******邮件服务器记录解析*********')┈┈┈print('*******名称服务器记录解析*********')try:┈┈┈任务7.2实现网络探测和安全扫描任务7.1IP地址管理与DNS解析任务7.3使用Scapy库处理网络数据包任务7.2实现网络探测和安全扫描任务说明01OPTION02OPTION03OPTION了解nmap工具的主要功能了解nmap工具的基本用法了解python-nmap库及其基本用法04OPTION05OPTION掌握主机发现Python程序的编写方法掌握服务和版本检测Python程序的编写方法任务7.2实现网络探测和安全扫描相关知识7.2.1nmap工具nmap工具的主要功能主机发现(HostDiscovery)端口扫描(PortScanning)版本检测(VersionDetection)操作系统检测(OperatingSystemDetection)nmap工具的用法nmap[扫描类型][选项]{扫描目标}任务7.2实现网络探测和安全扫描相关知识7.2.1nmap工具使用nmap工具进行端口扫描指定端口扫描类型指定扫描端口快速扫描与顺序扫描识别端口状态使用nmap工具进行其他检测主机发现服务和版本探测操作系统探测输出格式定义任务7.2实现网络探测和安全扫描相关知识7.2.2python-nmap库python-nmap的特点基于nmap工具进行端口自动化扫描。将nmap工具的强大功能与Python语言优秀的表达能力进行结合。编程实现自动执行扫描任务和生成报告。改进nmap工具输出结果的处理。安装python-nmap库apt-yinstallnmappipinstallpython-nmap任务7.2实现网络探测和安全扫描相关知识7.2.2python-nmap库实现端口扫描(1)实例化PortScanner类创建一个PortScanner对象。nm=nmap.PortScanner()(2)调用PortScanner对象的scan()方法进行扫描。scan(hosts="",ports=None,arguments="-sV",sudo=False,timeout=0)(3)获取扫描结果——返回字典类型的结果。>>>nm.scan('','1-1024'){'nmap':{'command_line':'nmap-oX--p1-1024-sV','scaninfo':{'tcp':{'method':'syn','services':'1-1024'}},'scanstats':{'timestr':'ThuMay2610:25:562022','elapsed':'6.27','uphosts':'1','downhosts':'0','totalhosts':'1'}},'scan':{'':{'hostnames':[{'name':'localhost','type':'PTR'}],'addresses':{'ipv4':''},'vendor':{},'status':{'state':'up','reason':'localhost-response'},'tcp':{631:{'state':'open','reason':'syn-ack','name':'ipp','product':'CUPS','version':'2.3','extrainfo':'','conf':'10','cpe':'cpe:/a:apple:cups:2.3'}}}}}任务7.2实现网络探测和安全扫描相关知识7.2.2python-nmap库处理扫描结果方法说明示例hostname()返回扫描对象的主机名>>>nm[''].hostname()'localhost'hostnames()返回扫描对象的主机名列表>>>nm[''].hostnames()[{'name':'localhost','type':'PTR'}]state()返回扫描对象的状态,包括4种状态(up、down、unknown、skipped)>>>nm[''].state()'up'all_protocols()返回扫描的协议,包括IP、TCP、UDP、SCTP(流控制传输协议)>>>nm[''].all_protocols()['tcp']all_tcp()返回TCP扫描的端口列表(自动排序)>>>nm[''].all_tcp()[631]tcp()返回扫描对象某TCP端口的信息>>>nm[''].tcp(631){'state':'open','reason':'syn-ack','name':'ipp','product':'CUPS','version':'2.3','extrainfo':'','conf':'10','cpe':'cpe:/a:apple:cups:2.3'}has_tcp()是否含有扫描对象某TCP端口的信息>>>nm[''].has_tcp(631)True任务7.2实现网络探测和安全扫描任务实现任务7.2.1检测网络中在线状态的主机importnmap#指定扫描目标网络target='/24'#创建PortScanner对象nm=nmap.PortScanner()#通过扫描检测子网中的主机状态nm.scan(hosts=target,arguments='-n-sn-PE-PA21,23,80,3389')#定义输出格式fm="{:25}\t{:10}"print('--------------主机状态----------------')print(fm.format('主机','状态'))hosts=nm.all_hosts()#从扫描结果中获取主机列表forhostinhosts:state=nm[host].state()#获取指定主机的状态
ifstate=='up':print('\033[1;32m',fm.format(host,'正在运行'))#以绿色字体显示运行状态的主机
else:print('\033[1;31m',fm.format(host,'已经停机'))#以红色字体显示停机状态的主机任务7.2实现网络探测和安全扫描任务实现任务7.2.1检测网络中在线状态的主机测试结果任务7.2实现网络探测和安全扫描任务实现任务7.2.2检测主机的服务及版本importnmapfromprettytableimportPrettyTable#定义报表用表格的PrettyTable对象并添加表头Report_Table=PrettyTable(["Host","Services","State","Version"])#指定扫描目标(这里是一个子网)target='/24'nm=nmap.PortScanner()#通过扫描检测主机中的服务、状态和版本nm.scan(target,arguments='-sV')任务7.2实现网络探测和安全扫描任务实现任务7.2.2检测主机的服务及版本#遍历扫描结果中的主机列表forhostinnm.all_hosts():#编辑指定主机的协议列表
forprotoinnm[host].all_protocols():#初始化表示服务、状态和版本的序列
services,states,versions=[],[],[]#获取指定主机指定协议的端口列表
ports=nm[host][proto].keys()#遍历端口列表并将服务、状态和版本数据添加到相应序列
forportinports:services.append(nm[host][proto][port]['name'])states.append(nm[host][proto][port]['state'])versions.append(nm[host][proto][port]['product']+''+nm[host][proto][port]['version'])#将一台主机的数据添加到PrettyTable表格
Report_Table.add_row([host,'\n'.join(services),'\n'.join(states),'\n'.join(versions)])print(Report_Table)任务7.2实现网络探测和安全扫描任务实现任务7.2.2检测主机的服务及版本测试结果任务7.2实现网络探测和安全扫描任务7.1IP地址管理与DNS解析任务7.3使用Scapy库处理网络数据包任务7.3使用Scapy库处理网络数据包任务说明01OPTION02OPTION03OPTION了解Scapy库的功能和安装方法了解Scapy库的基本用法学会使用Scapy库编写Python程序实现安全功能任务7.3使用Scapy库处理网络数据包相关知识7.3.1Scapy库简介Scapy库的特点Scapy是一个用于处理底层网络数据包的Python库。处理扫描、跟踪、探测、单元测试、攻击或网络发现等网络安全任务。实现nmap、tcpdump和wireshark等工具的部分功能。具有其他工具无法提供的特殊功能,如发送无效数据帧、注入修改的802.11帧、ARP缓存攻击。Scapy库在网络安全领域具有非常广泛的应用。安装Scapy库和IPythonpipinstall--prescapy[basic]任务7.3使用Scapy库处理网络数据包相关知识7.3.2Scapy库的基本使用方法Python程序中导入Scapyfromscapy.allimport*fromscapy.layers.inetimport*交互方式执行(venv)root@autowks:/autoom/07net#scapy…aSPY//YASaapyyyyCY//////////YCa|sY//////YSpcsscpCY//Pp|WelcometoScapyaypayyyyyyySCP//PpsyY//C|Version2.4.5…ccaacsusingIPython8.3.0>>>#可执行命令任务7.3使用Scapy库处理网络数据包相关知识7.3.2Scapy库的基本使用方法常用的辅助命令ls():不带参数可查看Scapy库支持的所有协议。lsc():查看当前Scapy库的所有命令列表。help():查看函数或命令的帮助信息。conf:查看当前的配置信息。任务7.3使用Scapy库处理网络数据包相关知识7.3.2Scapy库的基本使用方法构造数据包(单个包示例)>>>ip=IP(dst='1') #构造IP包>>>ip.dst #查看该包的目的地址'1'>>>ip.dst='0' #修改该包的目的地址>>>delip.dst #删除该包的目的地址>>>ip.dst #再次查看该包的目的地址,发现恢复默认值''任务7.3使用Scapy库处理网络数据包相关知识7.3.2Scapy库的基本使用方法构造数据包(一组包示例)>>>ip_pkts=IP(dst=['0','1']) #构造2个IP包>>>tcp_pkts=TCP(dport=[80,443]) #构造2个TCP包>>>[pforpinip_pkts/tcp_pkts]#通过层堆叠构成4(2×2)个包[<IPfrag=0proto=tcpdst=0|<TCPdport=http|>>,<IPfrag=0proto=tcpdst=0|<TCPdport=https|>>,<IPfrag=0proto=tcpdst=1|<TCPdport=http|>>,<IPfrag=0proto=tcpdst=1|<TCPdport=https|>>]任务7.3使用Scapy库处理网络数据包相关知识7.3.2Scapy库的基本使用方法发送数据包sendp():仅发送第2层数据包(以太网、802.3等。send():仅发送第3层数据包。发送数据包示例>>>pkt=IP(dst='0')/ICMP()/b'Hello!'>>>sendp(pkt).Sent1packets.>>>sp=sendp(pkt,return_packets=True).Sent1packets.>>>sp.show()0000IP/ICMP0>0echo-request0/Raw任务7.3使用Scapy库处理网络数据包相关知识7.3.2Scapy库的基本使用方法发送并接收数据包srp():发送第2层数据包,并且等待接收应答包。sr():发送第3层数据包,等待接收一个或多个应答包。sr1():发送第3层数据包,仅等待接收一个应答包。发送并接收数据包示例>>>pkt=sr(IP(dst="")/ICMP()/"Hello!")Beginemission:Finishedsending1packets..*Received2packets,got1answers,remaining0packets>>>pkt#返回包括两个列表的元组(<Results:TCP:0UDP:0ICMP:1Other:0>,<Unanswered:TCP:0UDP:0ICMP:0Other:0>)>>>pkt[0].show()0000IP/ICMP0>39echo-request0/Raw==>IP/ICMP39>0echo-reply0/Raw/Padding任务7.3使用Scapy库处理网络数据包相关知识7.3.2Scapy库的基本使用方法数据包的随机替换(示例)>>>pkt=srp(IP(dst='')/fuzz(UDP()/NTP(version=4)))Beginemission:Finishedsending1packets.........^CReceived8packets,got0answers,remaining1packets>>>pkt[1][0][UDP].show()###[UDP]###sport=ntpdport=ntplen=Nonechksum=None###[NTPHeader]###leap=lastminuteofthedayhas61secondsversion=4任务7.3使用Scapy库处理网络数据包相关知识7.3.2Scapy库的基本使用方法数据包的字节注入——使用RawVal()函数实现>>>pkt=IP(len=RawVal(b"NotAnInteger"),src="")>>>bytes(pkt)b'H\x00NotAnInt\x0f\xb3er\x00\x01\x00\x00@\x00\x00\x00\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x00'任务7.3使用Scapy库处理网络数据包相关知识7.3.2Scapy库的基本使用方法抓包>>>sniff(filter="host0andicmp",prn=lambdax:x.summary(),count=3)Ether/IP/ICMP0>0echo-request0/RawEther/IP/ICMP0>0echo-reply0/RawEther/IP/ICMP0>0echo-request0/Raw<Sniffed:TCP:0UDP:0ICMP:3Other:0>数据可视化支持通过PyX(需要预先安装模块)对数据进行可视化。将一个数据包或数据包列表以PostScript或PDF格式的图形输出。任务7.3使用Scapy库处理网络数据包任务实现任务7.3.1使用Scapy库进行SYN扫描#从scapy.all导入所有函数fromscapy.allimport*#从scapy.layers.inet导入IP等类fromscapy.layers.inetimportIP,TCP#定义要扫描的目标主机和端口target=['0','']port=[22,53,80,443]#构建SYN数据包并发送到目标主机和端口,由一个元组获取返回的数据包ans,unans=sr(IP(dst=target)/TCP(dport=port,flags='S'),timeout=30)#将获取的ACK数据包使用make_table()函数输出报表ans.make_table(lambdas,r:(s.dst,s.dport,r.sprintf('打开'))ifr.sprintf('%TCP.flags%')=='SA'else(s.dst,s.dport,r.sprintf('关闭')))任务7.3使用Scapy库处理网络数据包任务实现任务7.3.2使用Scapy库进行TCP路由跟踪fromscapy.allimport*fromscapy.layers.inetimportIP,TCP#指定目标主机target=''#构造自己的数据包去跟踪1至20跳的路由ans,unans=sr(IP(dst=target,ttl=(1,20),id=RandShort())/TCP(flags=0x2),timeout=60)#显示返回的路由,isinstance()函数用于判断返回包的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2022-2023学年山东省威海市高三(上)期末语文试卷
- 2020年北京医学院附属中学高三语文上学期期末试卷及答案
- 班主任工作范文高一班主任工作计划-0
- 联合申报科技立项协议书
- 离婚协议书 无子女财产自愿离婚协议书
- 数学课件网盘
- 清明课件小班安全
- 中国房地产企业监测报告(2024年10月)-2024
- 《妊娠与癫痫》课件
- 糖尿病患者饮食指导课件
- 汽车标准件手册
- 自动打印机机构设计课程设计
- 3、分段计费问题
- 基于8086的步进电机控制
- 印花税税源明细表(示范)
- 循环流化床锅炉氮氧化物生成与控制分析
- 关于申请创办宜康医院精神病医院的报告
- 《人间生活》高中美术鉴赏教案设计
- 公司优秀员工颁奖词
- 【学案】高中英语续后续写之环湖赛跑
- 电视剧剧组组成及职能
评论
0/150
提交评论