初學(xué)者如何開(kāi)始學(xué)習(xí)套接字編程
套接字是網(wǎng)絡(luò)間通信的端點(diǎn),套接字編程使這些端點(diǎn)能夠傳輸數(shù)據(jù),從而支持網(wǎng)絡(luò)和程序之間的通信。對(duì)于初學(xué)者來(lái)說(shuō),套接字編程很重要,可以理解網(wǎng)絡(luò)如何通信。
套接字編程具有很多好處,例如幫助實(shí)時(shí)連接,并且可以使用多種編程語(yǔ)言。最受歡迎的編程語(yǔ)言選項(xiàng)之一是Python,它是網(wǎng)絡(luò)專業(yè)人員在職業(yè)生涯中會(huì)用到的通用語(yǔ)言?!墩莆誔ython的網(wǎng)絡(luò)和安全》一書(shū)的作者JoséManuel Ortega認(rèn)為,雖然Python不是套接字編程初學(xué)者應(yīng)該學(xué)習(xí)的唯一語(yǔ)言,但它具有各種工具和模塊來(lái)幫助處理數(shù)據(jù)包,并提供高層次和低層次方法來(lái)處理套接字。
《掌握Python的網(wǎng)絡(luò)和安全》第二版探討了Python庫(kù)和腳本的網(wǎng)絡(luò)和安全,并探索了HTTP和套接字編程等方面來(lái)幫助初學(xué)者學(xué)習(xí)。
初學(xué)者對(duì)套接字編程的常見(jiàn)問(wèn)題有哪些?
José Manuel Ortega:對(duì)于初學(xué)者來(lái)說(shuō),最常見(jiàn)的問(wèn)題與套接字的實(shí)用程序有關(guān),在高層次來(lái)看,我們?cè)诰幊陶Z(yǔ)言(例如Python和C / C ++)中可使用哪些庫(kù),而在較低層次上,則涉及操作系統(tǒng)如何使用它用于應(yīng)用程序間的通信。
最后,我認(rèn)為這并不會(huì)在很大程度上取決所使用的庫(kù),具體取決于它們的編程語(yǔ)言或操作系統(tǒng)。最終,這更多地取決于人們對(duì)于網(wǎng)絡(luò)和安全概念的理解,以及如何在無(wú)需了解庫(kù)或特定語(yǔ)言的情況下解決特定問(wèn)題。
庫(kù)和Python這樣的語(yǔ)言,可以幫助你找到解決方案,但它們本身并不能為你提供解決方案,因?yàn)槟阈枰私饩W(wǎng)絡(luò)以及協(xié)議和操作系統(tǒng)的基本工作原理。然后再學(xué)習(xí)某種庫(kù)或編程語(yǔ)言,這并不是最重要的事情。
如果有人更具體地詢問(wèn)我有關(guān)Python中使用的庫(kù)的信息,我將推薦我在書(shū)中分析的那些庫(kù)。根據(jù)你最喜歡的語(yǔ)言,你會(huì)有不同的選擇,我建議你嘗試使用其他具有更好性能的語(yǔ)言,例如C / C ++。
套接字編程對(duì)網(wǎng)絡(luò)和安全的好處和挑戰(zhàn)是什么?
Ortega:從網(wǎng)絡(luò)的角度來(lái)看,我們可以使用套接字來(lái)部署客戶端服務(wù)器應(yīng)用程序-例如,聊天應(yīng)用程序。從安全的角度來(lái)看,套接字在較低級(jí)別上用于確定計(jì)算機(jī)已打開(kāi)的端口,而典型的端口掃描程序工具(例如Nmap)在較低級(jí)別上使用它們。它們也可以用于連接到外部服務(wù)器-通過(guò)使用反向Shell,這與我們使用SSH [Secure Socket Shell]命令的方式相同。
主要挑戰(zhàn)在于,能否異步發(fā)出請(qǐng)求,例如,通過(guò)python-socketio項(xiàng)目,你可以部署客戶端、應(yīng)用程序和服務(wù)器,可與Python Web框架(例如Flask)集成。
對(duì)于傳輸控制協(xié)議(TCP)到用戶數(shù)據(jù)報(bào)協(xié)議(UDP),套接字編程有什么不同?
Ortega:TCP和UDP之間的主要區(qū)別在于TCP是面向連接的。這意味著它可以保證我們的數(shù)據(jù)包將到達(dá)目的地,并在數(shù)據(jù)包傳遞失敗時(shí)發(fā)出錯(cuò)誤通知。另一方面,UDP則適用于需要高效通信且不必?fù)?dān)心數(shù)據(jù)包丟失的應(yīng)用程序。
在Python中使用TCP和UDP的主要區(qū)別在于,創(chuàng)建套接字時(shí),必須將SOCK_DGRAM用于UDP,將SOCK_STREAM用于TCP。
為什么網(wǎng)絡(luò)專業(yè)人員應(yīng)該使用Python進(jìn)行套接字編程而不是另一種語(yǔ)言?
Ortega:Python提供所需的套接字模塊,以在高級(jí)別和低級(jí)別使用套接字。套接字模塊提供所有必需的功能,可以快速編寫(xiě)TCP和UDP客戶端和服務(wù)器。
Python還提供其他工具,用于處理網(wǎng)絡(luò)數(shù)據(jù)包,例如Scapy,它是用Python編寫(xiě)的模塊,用于處理支持多種網(wǎng)絡(luò)協(xié)議的數(shù)據(jù)包。該工具允許創(chuàng)建和修改各種類型的網(wǎng)絡(luò)數(shù)據(jù)包,實(shí)現(xiàn)捕獲和嗅探數(shù)據(jù)包的功能。
此外,如果我們將其與C / C ++之類的程序進(jìn)行比較,其學(xué)習(xí)曲線也很低。
什么在推動(dòng)套接字編程的部署?有沒(méi)有可行的替代方案?
Ortega:套接字提供的主要優(yōu)點(diǎn)是它們具有實(shí)時(shí)維護(hù)連接的能力,并且我們可以在連接的一端到另一端之間發(fā)送和接收數(shù)據(jù)。例如,我們可以創(chuàng)建自己的客戶端-服務(wù)器應(yīng)用程序,該應(yīng)用程序允許我們實(shí)時(shí)接收和發(fā)送消息,并以異步方式處理這些消息。
在Python中使用套接字的主要替代方法是,我們可以在asyncio模塊中找到該模塊,該模塊允許我們并行執(zhí)行異步調(diào)用,以并行啟動(dòng)請(qǐng)求。