python網路協議
『壹』 python 之 Socket編程(TCP/UDP)
socket(family,type[,protocal]) 使用給定的地址族、套接字類型、協議編號(默認為0)來創建套接字。
有效的埠號: 0~ 65535
但是小於1024的埠號基本上都預留給了操作系統
POSIX兼容系統(如linux、Mac OS X等),在/etc/services文件中找到這些預留埠與的列表
面向連接的通信提供序列化、可靠的和不重復的數據交付,而沒有記錄邊界。意味著每條消息都可以拆分多個片段,並且每個消息片段都能到達目的地,然後將它們按順序組合在一起,最後將完整的信息傳遞給等待的應用程序。
實現方式(TCP):
傳輸控制協議(TCP), 創建TCP必須使用SOCK_STREAM作為套接字類型
因為這些套接字(AF_INET)的網路版本使用網際網路協議(IP)來搜尋網路中的IP,
所以整個系統通常結合這兩種協議(TCP/IP)來進行網路間數據通信。
數據報類型的套接字, 即在通信開始之前並不需要建議連接,當然也無法保證它的順序性、可靠性或重復性
實現方式(UDP)
用戶數據包協議(UDP), 創建UDP必須使用SOCK_DGRAM (datagram)作為套接字類型
它也使用網際網路來尋找網路中主機,所以是UDP和IP的組合名字UDP/IP
注意點:
1)TCP發送數據時,已建立好TCP連接,所以不需要指定地址。UDP是面向無連接的,每次發送要指定是發給誰。
2)服務端與客戶端不能直接發送列表,元組,字典。需要字元串化repr(data)。
TCP的優點: 可靠,穩定 TCP的可靠體現在TCP在傳遞數據之前,會有三次握手來建立連接,而且在數據傳遞時,有確認、窗口、重傳、擁塞控制機制,在數據傳完後,還會斷開連接用來節約系統資源。
TCP的缺點: 慢,效率低,佔用系統資源高,易被攻擊 TCP在傳遞數據之前,要先建連接,這會消耗時間,而且在數據傳遞時,確認機制、重傳機制、擁塞控制機制等都會消耗大量的時間,而且要在每台設備上維護所有的傳輸連接,事實上,每個連接都會佔用系統的CPU、內存等硬體資源。 而且,因為TCP有確認機制、三次握手機制,這些也導致TCP容易被人利用,實現DOS、DDOS、CC等攻擊。
什麼時候應該使用TCP : 當對網路通訊質量有要求的時候,比如:整個數據要准確無誤的傳遞給對方,這往往用於一些要求可靠的應用,比如HTTP、HTTPS、FTP等傳輸文件的協議,POP、SMTP等郵件傳輸的協議。 在日常生活中,常見使用TCP協議的應用如下: 瀏覽器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件傳輸.
UDP的優點: 快,比TCP稍安全 UDP沒有TCP的握手、確認、窗口、重傳、擁塞控制等機制,UDP是一個無狀態的傳輸協議,所以它在傳遞數據時非常快。沒有TCP的這些機制,UDP較TCP被攻擊者利用的漏洞就要少一些。但UDP也是無法避免攻擊的,比如:UDP Flood攻擊……
UDP的缺點: 不可靠,不穩定 因為UDP沒有TCP那些可靠的機制,在數據傳遞時,如果網路質量不好,就會很容易丟包。
什麼時候應該使用UDP: 當對網路通訊質量要求不高的時候,要求網路通訊速度能盡量的快,這時就可以使用UDP。 比如,日常生活中,常見使用UDP協議的應用如下: QQ語音 QQ視頻 TFTP ……
『貳』 Python網路編程6-使用Pysnmp實現簡單網管
簡單網路管理協議SNMP(Simple Network Management Protocol)用於網路設備的管理。SNMP作為廣泛應用於TCP/IP網路的網路管理標准協議,提供了統一的介面,從而實現了不同種類和廠商的網路設備之間的統一管理。
SNMP協議分為三個版本:SNMPv1、SNMPv2c和SNMPv3。
SNMP系統由網路管理系統NMS(Network Management System)、SNMP Agent、被管對象Management object和管理信息庫MIB(Management Information Base)四部分組成。
SNMP查詢是指NMS主動向SNMP Agent發送查詢請求,如圖1-3所示。SNMP Agent接收到查詢請求後,通過MIB表完成相應指令,並將結果反饋給NMS。SNMP查詢操作有三種:Get、GetNext和GetBulk。SNMPv1版本不支持GetBulk操作。
不同版本的SNMP查詢操作的工作原理基本一致,唯一的區別是SNMPv3版本增加了身份驗證和加密處理。下面以SNMPv2c版本的Get操作為例介紹SNMP查詢操作的工作原理。假定NMS想要獲取被管理設備MIB節點sysContact的值,使用可讀團體名為public,過程如下所示:
SNMP設置是指NMS主動向SNMP Agent發送對設備進行Set操作的請求,如下圖示。SNMP Agent接收到Set請求後,通過MIB表完成相應指令,並將結果反饋給NMS。
不同版本的SNMP Set操作的工作原理基本一致,唯一的區別是SNMPv3版本增加了身份驗證和加密處理。下面以SNMPv3版本的Set操作為例介紹SNMP Set操作的工作原理。
假定NMS想要設置被管理設備MIB節點sysName的值為HUAWEI,過程如下所示:
SNMPv1和SNMPv2c的Set操作報文格式如下圖所示。一般情況下,SNMPv3的Set操作信息是經過加密封裝在SNMP PDU中,其格式與SNMPv2c的Set操作報文格式一致。
SNMP Traps是指SNMP Agent主動將設備產生的告警或事件上報給NMS,以便網路管理員及時了解設備當前運行的狀態。
SNMP Agent上報SNMP Traps有兩種方式:Trap和Inform。SNMPv1版本不支持Inform。Trap和Inform的區別在於,SNMP Agent通過Inform向NMS發送告警或事件後,NMS需要回復InformResponse進行確認。
在Ensp中搭建網路環境,在R2上啟用SNMP作為SNMP agent,Linux主機作為NMS;為方便觀察SNMP報文格式,在R2使用SNMP的版本為v2c。
通過下面的Python腳本獲取R2的系統信息與當前的主機名
運行結果如下
在R2介面上抓包結果如下,Linux主機向R2的161埠發送SNMP get-request報文,可以看到SNMP使用的版本為v2c,設置的團體名為public,隨機生成了一個request-id,變數綁定列表(Variable bindings),即要查詢的OID,但Value為空;值得注意的是這些信息都是明文傳輸的,為了安全在實際環境中應使用SNMPv3。
通過下面的Python腳本獲取R2的介面信息。
運行結果如下:
在R2介面抓包結果如下,getBuikRequest相比get-request設置了一個max-repetitions欄位,表明最多執行get操作的次數。Variable bindings中請求的OID條目只有一條。
下面Python腳本用於設置R2的主機名為SNMPv2R2。
運行結果如下
在路由器上可以看到主機名有R2變為了SNMPv2R2。
get-response數據包內容與set-request中無異。
下面Python腳本用於接收,R2發送的Trap,並做簡單解析。
先運行該腳本,之後再R2上手動將一個介面shutdown,結果如下:
介面上抓包結果如下,此時團體名用的是public,data部分表明是trap。
由於Ensp中的通用路由器認證演算法只支持des56,而pysnmp不支持該演算法,因此使用AR路由器配置SNMPv3。
使用下面Python腳本發送snmpv3 get報文獲取設備系統信息。
抓包結果如下,首先發送get-resques進行SNMPv3認證請求,隨機生成一個msgID,認證模式為USM,msgflgs中Reportable置1要求對方發送report,其他為置0,表示不進行加密與鑒權;另外安全參數,認證參數、加密參數都為空,此時不攜帶get請求數據。
路由器給NMS回復report,msgID與resquest一致,Msgflgs中各位都置0,同時回復使用的安全引擎,認證與加密參數為空,不進行認證與加密,因此能看到data中的數據。
AR1收到請求後進行回復,數據包中msgflags標志位中除reportable外其他位都置1,表示不需要回復,同時進行加密與鑒權。同樣也可以看到認證用戶為testuser,認證參數與加密參數都有填充,data部分也是同樣加密。
參考:
什麼是SNMP - 華為 (huawei.com)
AR100-S V300R003 MIB參考 - 華為 (huawei.com)
SNMP library for Python — SNMP library for Python 4.4 documentation (pysnmp.readthedocs.io)
『叄』 Python網路編程5-實現DHCP Client
DHCP(Dynamic Host Configuration Protocol,動態主機配置協議),前身是BOOTP協議,是一個區域網的網路協議,使用UDP協議工作,統一使用兩個IANA分配的埠:67(伺服器端),68(客戶端)。主要作用是集中的管理、分配IP地址,使client動態的獲得IP地址、Gateway地址、DNS伺服器地址等信息。
option欄位
DHCP報文中的Options欄位可以用來存放普通協議中沒有定義的控制信息和參數。如果用戶在DHCP伺服器端配置了Options欄位,DHCP客戶端在申請IP地址的時候,會通過伺服器端回應的DHCP報文獲得Options欄位中的配置信息。
獲取IP地址過程
實驗使用的linux 主機由兩個網路介面,其中ens33使用DHCP獲取IP地址,ens37使用靜態IP地址;因此需要使用ens33來發送數據包。
Change_MAC.py用於MAC地址與Bytes類型相互轉換。
DHCP_Discover.py用於發送DHCP Discover報文;其中GET_MAC.py見ARP章節。
DHCP_Request.py用於發送DHCP Request報文。
DHCP_FULL.py用於完成DHCP Client與DHCP Server的報文交互
Wireshark對遠程linux主機抓包,結果如下
客戶端以廣播發送DHCP Discover包,其中報文操作類型為1(請求報文),DHCP客戶端的MAC地址設置為00:0c:29:03:a1:08,option53設置報文類型為Discover,option55(請求選項列表)中包含請求的參數。
伺服器以單播向客戶端回復信息,其中報文操作類型為2(應答報文),分配給客戶端的IP為192.168.160.146,option 53設置報文類型為offer,Option 54設置伺服器標識為192.168.160.254,其他option為客戶端請求列表的應答。
值得注意的是,交互的四個報文中Transaction ID均為0x00000000,表明是同一次DHCP交互報文。
『肆』 Python語言學什麼_python語言能做什麼
這里整理了一份系統全面的Python開發學習路線,主要涉及以下知識,感興趣的小夥伴歡迎一起來學習~
第一階段:專業核心基礎
階段目標:
1.熟練掌握Python的開發環境與編程核心知識
2.熟練運用Python面向對象知識進行程序開發
3.對Python的核心庫和組件有深入理解
4.熟練應用SQL語句進行資料庫常用操作
5.熟練運用Linux操作系統命令及環境配置
6.熟練使用MySQL,掌握資料庫高級操作
7.能綜合運用所學知識完成項目
知識點:
Python編程基礎、Python面向對象、Python高級進階、MySQL資料庫、Linux操作系統。
1、Python編程基礎,語法規則,函數與參數,數據類型,模塊與包,文件IO,培養扎實的Python編程基本功,同時對Python核心對象和庫的編程有熟練的運用。
2、Python面向對象,核心對象,異常處理,多線程,網路編程,深入理解面向對象編程,異常處理機制,多線程原理,網路協議知識,並熟練運用於項目中。
3、類的原理,MetaClass,下劃線的特殊方法,遞歸,魔術方法,反射,迭代器,裝飾器,UnitTest,Mock。深入理解面向對象底層原理,掌握Python開發高級進階技術,理解單元測試技術。
4、資料庫知識,範式,MySQL配置,命令,建庫建表,數據的增刪改查,約束,視圖,存儲過程,函數,觸發器,事務,游標,PDBC,深入理解資料庫管理系首褲如統通用知識及MySQL資料庫的使用與管理。為Python後台開發打下堅實基礎。
5、Linux安裝配置,文件目錄操作,VI命令,管理,用戶與許可權,環境配置,Docker,Shell編程Linux作為一個主流的伺服器操作系統,是每一個開發工程師必須掌握的重點技術,並且能夠熟練運用。
第二階段:PythonWEB開發
階段目標:
1.熟練掌握Web前端開發純螞技術,HTML,CSS,JavaScript及前端框架
2.深入理解Web系統中的前後端交互過程與通信協議
3.熟練運用Web前端和Django和Flask等主流框架完成Web系統開發
4.深入理解網路協議,分布式,PDBC,AJAX,JSON等知識
5.能夠運用所學知識開發一個MiniWeb框架,掌握框架實現原理
6.使用Web開發框架實現貫穿項目
知識點:
Web前端編程、Web前端高級、Django開發框架、Flask開發框架、Web開發項目實戰。
1、Web頁面元素,布局,CSS樣式,盒模型,JavaScript,JQuery與Bootstrap掌握前者啟端開發技術,掌握JQuery與BootStrap前端開發框架,完成頁面布局與美化。
2、前端開發框架Vue,JSON數據,網路通信協議,Web伺服器與前端交互熟練使用Vue框架,深入理解HTTP網路協議,熟練使用Swagger,AJAX技術實現前後端交互。
3、自定義Web開發框架,Django框架的基本使用,Model屬性及後端配置,Cookie與Session,模板Templates,ORM數據模型,Redis二級緩存,RESTful,MVC模型掌握Django框架常用API,整合前端技術,開發完整的WEB系統和框架。
4、Flask安裝配置,App對象的初始化和配置,視圖函數的路由,Request對象,Abort函數,自定義錯誤,視圖函數的返回值,Flask上下文和請求鉤子,模板,資料庫擴展包Flask-Sqlalchemy,資料庫遷移擴展包Flask-Migrate,郵件擴展包Flask-Mail。掌握Flask框架的常用API,與Django框架的異同,並能獨立開發完整的WEB系統開發。
第三階段:爬蟲與數據分析
階段目標:
1.熟練掌握爬蟲運行原理及常見網路抓包工具使用,能夠對HTTP及HTTPS協議進行抓包分析
2.熟練掌握各種常見的網頁結構解析庫對抓取結果進行解析和提取
3.熟練掌握各種常見反爬機制及應對策略,能夠針對常見的反爬措施進行處理
4.熟練使用商業爬蟲框架Scrapy編寫大型網路爬蟲進行分布式內容爬取
5.熟練掌握數據分析相關概念及工作流程
6.熟練掌握主流數據分析工具Numpy、Pandas和Matplotlib的使用
7.熟練掌握數據清洗、整理、格式轉換、數據分析報告編寫
8.能夠綜合利用爬蟲爬取豆瓣網電影評論數據並完成數據分析全流程項目實戰
知識點:
網路爬蟲開發、數據分析之Numpy、數據分析之Pandas。
1、爬蟲頁面爬取原理、爬取流程、頁面解析工具LXML,正則表達式,代理池編寫和架構、常見反爬措施及解決方案、爬蟲框架結構、商業爬蟲框架Scrapy,基於對爬蟲爬取原理、網站數據爬取流程及網路協議的分析和了解,掌握網頁解析工具的使用,能夠靈活應對大部分網站的反爬策略,具備獨立完成爬蟲框架的編寫能力和熟練應用大型商業爬蟲框架編寫分布式爬蟲的能力。
2、Numpy中的ndarray數據結構特點、numpy所支持的數據類型、自帶的數組創建方法、算術運算符、矩陣積、自增和自減、通用函數和聚合函數、切片索引、ndarray的向量化和廣播機制,熟悉數據分析三大利器之一Numpy的常見使用,熟悉ndarray數據結構的特點和常見操作,掌握針對不同維度的ndarray數組的分片、索引、矩陣運算等操作。
3、Pandas裡面的三大數據結構,包括Dataframe、Series和Index對象的基本概念和使用,索引對象的更換及刪除索引、算術和數據對齊方法,數據清洗和數據規整、結構轉換,熟悉數據分析三大利器之一Pandas的常見使用,熟悉Pandas中三大數據對象的使用方法,能夠使用Pandas完成數據分析中最重要的數據清洗、格式轉換和數據規整工作、Pandas對文件的讀取和操作方法。
4、matplotlib三層結構體系、各種常見圖表類型折線圖、柱狀圖、堆積柱狀圖、餅圖的繪制、圖例、文本、標線的添加、可視化文件的保存,熟悉數據分析三大利器之一Matplotlib的常見使用,熟悉Matplotlib的三層結構,能夠熟練使用Matplotlib繪制各種常見的數據分析圖表。能夠綜合利用課程中所講的各種數據分析和可視化工具完成股票市場數據分析和預測、共享單車用戶群里數據分析、全球幸福指數數據分析等項目的全程實戰。
第四階段:機器學習與人工智慧
階段目標:
1.理解機器學習相關的基本概念及系統處理流程
2.能夠熟練應用各種常見的機器學習模型解決監督學習和非監督學習訓練和測試問題,解決回歸、分類問題
3.熟練掌握常見的分類演算法和回歸演算法模型,如KNN、決策樹、隨機森林、K-Means等
4.掌握卷積神經網路對圖像識別、自然語言識別問題的處理方式,熟悉深度學習框架TF裡面的張量、會話、梯度優化模型等
5.掌握深度學習卷積神經網路運行機制,能夠自定義卷積層、池化層、FC層完成圖像識別、手寫字體識別、驗證碼識別等常規深度學習實戰項目
知識點:
1、機器學習常見演算法、sklearn數據集的使用、字典特徵抽取、文本特徵抽取、歸一化、標准化、數據主成分分析PCA、KNN演算法、決策樹模型、隨機森林、線性回歸及邏輯回歸模型和演算法。熟悉機器學習相關基礎概念,熟練掌握機器學習基本工作流程,熟悉特徵工程、能夠使用各種常見機器學習演算法模型解決分類、回歸、聚類等問題。
2、Tensorflow相關的基本概念,TF數據流圖、會話、張量、tensorboard可視化、張量修改、TF文件讀取、tensorflowplayround使用、神經網路結構、卷積計算、激活函數計算、池化層設計,掌握機器學習和深度學習之前的區別和練習,熟練掌握深度學習基本工作流程,熟練掌握神經網路的結構層次及特點,掌握張量、圖結構、OP對象等的使用,熟悉輸入層、卷積層、池化層和全連接層的設計,完成驗證碼識別、圖像識別、手寫輸入識別等常見深度學習項目全程實戰。