Python中文网

编程书籍推荐:Python网络编程(Linux)(大数据与人工智能技术丛书),由清华大学出版社2018-08-01月出版,本书发行作者信息: 赵宏,包广斌,马栋林 著此次为第1次发行, 国际标准书号为:9787302504832,品牌为清华大学, 这本书采用平装开本为16,附件信息:未知,纸张采为胶版纸,全书共有211页字数34万 2000字,值得推荐的Python Book。

此书内容摘要

本书选用各项性能指标优良的Ubuntu作为Linux系统实例,以Python为编程语言,理论结合实践,系统地讲解网络各层次的功能、所包含的常用协议、数据报文格式,并给出实际操作的程序实例。本书包括Linux系统介绍、Python语言基础、TCP/IP协议簇、Socket原理、进程和线程、网络应用程序实例、Web应用程序开发等内容。本书内容也适用于其他版本的Linux。


本书可作为普通高等院校信息类专业本科生和研究生教材,也可作为广大Linux用户、网络管理员、程序员的自学用书和参考手册。


关于此书作者

暂无.

编辑们的推荐

《Linux网络编程(Python)》立足开源Linux系统,选用系统运维的常用语言Python阐述TCP/IP协议簇、Socket等编程原理,讲解并例示HTTP、FTP、E-mail、Web APP、Web框架等系统运维实例,并结合多线程和数据库技术完善与增强应用实例的功能。本书全部代码可在GITHUB下载。

Python网络编程(Linux)(大数据与人工智能技术丛书)图书的目录

目录



第1章Linux系统介绍


1.1Linux的诞生


1.2Linux的特点


1.3Linux的组成


1.4Linux的应用


1.5常见Linux发行版本


1.6Linux的安装


1.6.1常用的安装方式


1.6.2安装前的准备


1.6.3虚拟机安装Linux


1.6.4多操作系统的安装


1.7本章小结


习题


第2章Python语言基础


2.1Python语言简介


2.2Python语言解释器安装


2.2.1在线安装


2.2.2下载安装


2.2.3管理多个Python版本


2.2.4安装Python的IDE环境


2.2.5测试Python IDE


2.3数据类型


2.3.1布尔型


2.3.2整型


2.3.3浮点型


2.3.4复数型


2.3.5字符串型


2.3.6列表型


2.3.7元组型


2.3.8字典型


2.3.9日期型


2.3.10数组型


2.4语法规则与语句


2.4.1输出与输入


2.4.2条件判断


2.4.3循环


2.5函数与模块


2.5.1自定义函数


2.5.2默认参数


2.5.3可变参数


2.5.4关键字参数


2.5.5命名关键字参数


2.5.6参数组合规则


2.5.7实参与形参


2.5.8递归


2.5.9模块


2.6类与对象


2.6.1类的定义与实例化对象


2.6.2类属性与实例属性


2.6.3属性封装


2.6.4类的继承


2.6.5多态


2.7异常和异常处理


2.7.1异常捕获与处理


2.7.2抛出异常


2.8文件


2.8.1读写文本文件


2.8.2读写二进制文件


2.8.3读写JSON


2.8.4读写StringIO


2.8.5读写BytesIO


2.9本章小结


习题


第3章TCP/IP协议簇


3.1TCP/IP协议簇介绍


3.2链路层


3.3网络层


3.3.1IPv4


3.3.2IPv6


3.3.3网络层协议


3.3.4获取计算机IP地址实例


3.3.5获取局域网网关地址实例


3.4传输层


3.4.1UDP


3.4.2TCP


3.4.3主机收发数据统计信息程序实例


3.5应用层


3.5.1HTTP


3.5.2HTTPS


3.5.3FTP


3.5.4DNS


3.5.5SMTP


3.5.6POP3


3.5.7DHCP


3.6本章小结


习题


部分内容试读



前言



Linux系统与互联网相伴而生,共同成长,成为现代信息技术高速发展的重要支撑和驱动力。Python作为一种开源、跨平台、面向对象的新型计算机程序设计语言,语法简洁,语义清晰,有丰富、强大的库的支持,广泛应用在网络编程、科学计算、人工智能等各个领域。两者的结合能够使读者快速理解基础理论,掌握实践技能,提高学习和工作的效率。

本书选用Ubuntu Desktop为实践平台,以Python语言为编程工具,针对互联网所使用的TCP/IP协议簇进行分层介绍和解析,并给出实际操作的程序实例。


全书共分为7章。第1章介绍Linux的历史、特点、组成、常见发行版本以及Linux常用的各种安装方式,由马栋林编写。第2章讲解Python语言的特点、开发环境安装、数据类型、语法规则、语句、函数、模块、类、对象、异常、文件等内容,由赵宏编写。第3章分层讲解TCP/IP各层主要协议、数据报文格式、层间数据交换规则、常见网络应用与各层协议的对应、程序实例等内容,由包广斌编写。第4章讲解Socket原理、SOCK_STREAM、SOCK_DGRAM、SOCK_RAW等内容,并通过程序实例演示Socket在C/S结构编程和网络嗅探中的实际应用,由赵宏和马栋林编写。第5章讲解多进程和多线程技术在网络编程中的应用,通过实例对比多进程与多线程实现方案的异同,并介绍了利用socketserver编写多进程和多线程程序的方法,最后通过GUI聊天室程序实例说明了多进程和多线程编程技术的实际应用,由包广斌和赵宏编写。第6章讲解网页内容获取、访问FTP服务器、访问DNS、收发E�瞞ail、获取DHCP信息等实用程序的编写方法与过程,这些实例能够让读者进一步理解网络理论和工具软件的运行机制,由赵宏和包广斌编写。第7章介绍Python开发Web应用程序的方法,讲解WSGI工作原理,以流行的Web开发框架Django为例,演示Web应用程序开发工程,由赵宏和马栋林编写。


本书在编写过程中,得到兰州理工大学计算机与通信学院和信息中心各位老师的支持。硕士研究生韩泽宇、蒋家俊、张浩和王孝通帮助调试本书部分代码。

本书的编写受到兰州理工大学教学研究项目和CERNET下一代互联网技术项目(NGII20160311,NGII20160112)的资助。


因时间仓促,不足在所难免,请大家批评指正,读者可通过zhaoh@lut.edu.cn或594286500@qq.com与作者联系,也可以加入本书的QQ群643116956进行讨论。


为方便教学,作者开发了与本书相配套的多媒体课件、课后习题答案和程序代码,读者可扫描封底课件二维码下载或者向编者索取。




作者

2018年6月于兰州理工大学




关于此书评价

暂无.

书摘内容

第3章TCP/IP协议簇



3.1TCP/IP协议簇介绍


TCP(Transmission Control Protocol)/IP(Internet Protocol)协议是现代互联网的基石,其实TCP/IP代表一组协议,称为TCP/IP协议簇,TCP和IP只是其中的两个最重要的协议。TCP/IP协议簇使得由异构硬件和软件系统组成的主机进行互联,从而构建起全球互联网大厦。

由于主机间进行通信的过程十分复杂,因此,经常将主机间通信的过程划分为相对独立的不同层次,每层实现相对独立的一定功能,上层通过标准接口调用下层提供的功能而不关心具体的细节,以简化主机间通信协议的设计。ISO(International Standardization Organization)推出的OSI(Open System Interconnect Reference Model)协议是一种参考协议,分为七层,从下到上分别为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。TCP/IP协议簇参考ISO/OSI实现。

TCP/IP协议中的TCP协议最早由斯坦福大学的两名研究人员于1973年提出,为实现主机间通过TCP通信,逐渐衍生出其他协议,最终形成TCP/IP协议族。1983年TCP/IP协议簇被UNIX 4.2BSD系统采用,随着UNIX的成功,TCP/IP协议簇逐步成为UNIX主机间通信的标准网络协议。Internet的前身ARPANET最初使用NCP(Network Control Protocol)协议,后来由于看到TCP/IP协议簇具有跨平台特性,于是ARPANET的实验人员对TCP/IP协议簇进行改进后采用,并规定连入ARPANET的计算机必须采用TCP/IP协议簇。



图3��1TCP/IP协议簇结构


随着ARPANET逐渐发展成为Internet,TCP/IP协议簇也就成了Internet的标准连接协议。

TCP/IP协议簇由四层构成,各层的名称与所包含的协议如图3��1所示,其中的应用层与链路层包含的协议众多,而传输层和网络层包含的协议较少。




3.2链路层


链路层也称为数据链路层或网络接口层,该层包括主机用于连接网络的网络接口卡及其驱动程序,主要处理与传输媒介(如双绞线、光纤、无线电波等)的物理接口细节。由于绝大部分主机使用Ethernet网卡接入网络,因此,链路层所使用的通信协议一般为Ethernet。

链路层处理的数据为数据帧,格式如图3��2所示,其中,目标MAC(Media Access Control)地址、源MAC地址和类型组成14(6+6+2)字节的帧头,后面为数据部分,最后为CRC(Cyclic Redundancy Check)部分。




图3��2链路层数据帧格式





在图3��2中,MAC地址为主机网络接口卡地址; 类型为来自网络层的数据类型,IPv4为0x0800,ARP为0x0806,PPPoE为0x8864,802.1Q tag为0x8100,IPv6为0x86DD,MPLS Label为0x8847; 数据部分为来自网络层的数据,最少为46字节,最大为1500字节; CRC为循环冗余校验码,主要校验所收到的数据是否有错。链路层数据帧最小为64(6+6+2+46+4)字节,最大为1518(6+6+2+1500+4)字节,主要利用网络接口卡的物理地址即MAC地址进行通信。

主机作为数据发送方时,链路层负责将来自本机网络层的数据报文封装为数据帧进行发送,数据接收方在收到数据帧后会给数据发送方发送反馈信息,如果数据传输有误,发送方需要重新发送出错的帧数据; 主机作为数据接收方时,链路层负责对接收到的数据帧进行CRC校验,并给数据发送方发送反馈信息,要求重新发送出错的帧数据,并将接收到的正确帧数据的目标MAC地址、源MAC地址和CRC部分去掉后,递交给网络层处理。

链路层通信用MAC地址识别主机,主机间交换数据帧。

代码3��1可以获取本机网卡的MAC地址。




1#代码3��1link01.py


2#!/usr/bin/env python3


3# coding: utf-8


4import uuid


5node = uuid.uuid1()


6print('type(node)=',type(node))


7print('node=',node)


8hex = node.hex


9print('hex=',hex)


10mac_addr = hex[-12:]


11print('mac_addr=',mac_addr)






代码3��1第4行引入uuid,uuid实现UUID(Universally Unique Identifier),即全局唯一标识符。第5行通过调用uuid的uuid1()函数,得到由MAC地址、当前时间戳和随机数字生成,以对象node表示的UUID值。第8行通过对象node的hex属性得到包含主机MAC地址的字符串,第10行取字符串的后12位,即为主机的MAC地址。程序运行结果如图3��3所示。





type(node)=


node=997041ae-937a-11e7-a2db-000c294be4dd


hex=997041ae937a11e7a2db000c294be4dd


mac_addr=000c294be4dd





图3��3代码3��1运行结果



Python的第三方模块psutil可以获取主机的大量信息,其中包括主机全部网卡的设备名称和MAC地址,在命令行下在线安装psutil的步骤如下。




sudo apt-get install python3-pip


pip3 install psutil





其中,命令“sudo apt�瞘et install python3�瞤ip”用于安装pip工具,pip是Python软件包管理工具,此处安装的pip版本号为3; 命令“pip3 install psutil”使用pip工具安装psutil模块。

利用psutil获取主机网卡设备名称和MAC地址程序如代码3��2所示。




1#代码3��2link02.py


2#!/usr/bin/env python3


3# coding: utf-8


4import psutil


5info=psutil.net_if_addrs()


6print('info=',info)


7print('type(info)=',type(info))


8net1=info['eth0']


9print('net1=',net1)


10print('type(net1)=',type(net1))


11packet=net1[2]


12print('packet=',packet)


13print('type(packet)=',type(packet))


14print('mac_addr=',packet.address)





代码3��2第4行引入了psutil,调用psutil的net_if_addrs()函数获取了主机全部的网卡信息,然后从获取的信息中逐步得到网卡设备名称和MAC地址,程序运行结果如图3��4所示。

如图3��4所示,主机全部网卡的信息保存在字典型变量info中,其中包含的网卡设备名称分别为eth0和lo; 网卡eth0的信息保存在列表变量net1中; 从net1中取得的网卡物理信息保存在对象packet中,最后从packet的属性address中取得网卡的MAC地址。

注: 有些第三方模块,例如,psutil,安装后,只能由系统默认安装的Python调用,此时,应将系统默认安装的Python设置为最高优先级,在命令行下执行调用psutil模块的程序,在Atom集成环境执行这些程序会抛出异常。




info= {'eth0': [snic(family=, address='192.168.3.17', netmask='255.255.255.0', broadcast='192.168.3.255', ptp=暂无.), snic(family=, address='fe80∷d669:5643:a4a5:e4b4%eth0', netmask='ffff:ffff:ffff:ffff∷', broadcast=暂无., ptp=暂无.), snic(family=, address='00:0c:29:4b:e4:dd', netmask=暂无., broadcast='ff:ff:ff:ff:ff:ff', ptp=暂无.)], 'lo': [snic(family=, address='127.0.0.1', netmask='255.0.0.0', broadcast=暂无., ptp=暂无.), snic(family=, address='∷1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=暂无., ptp=暂无.), snic(family=, address='00:00:00:00:00:00', netmask=暂无., broadcast=暂无., ptp=暂无.)]}


type(info)=


net1= [snic(family=, address='192.168.3.17', netmask='255.255.255.0', broadcast='192.168.3.255', ptp=暂无.), snic(family=, address='fe80∷d669:5643:a4a5:e4b4%eth0', netmask='ffff:ffff:ffff:ffff∷', broadcast=暂无., ptp=暂无.), snic(family=, address='00:0c:29:4b:e4:dd', netmask=暂无., broadcast='ff:ff:ff:ff:ff:ff', ptp=暂无.)]


type(net1)=


packet= snic(family=, address='00:0c:29:4b:e4:dd', netmask=暂无., broadcast='ff:ff:ff:ff:ff:ff', ptp=暂无.)


type(packet)=


mac_addr= 00:0c:29:4b:e4:dd


Python网络编程(Linux)(大数据与人工智能技术丛书)最新最全的试读、书评、目录、简介信息由Python中文网整理提供。