iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0
Python

讓Python與資安共舞系列 第 9

Socket模組

  • 分享至 

  • xImage
  •  

今天要介紹的是安全滲透測試中的模組,為什麼在滲透測試中需要模組呢?Python內建了許多針對常見網路通訊協定的模組,這些模組用來封裝網路通訊協定的層次。托這些模組的福,上百行的程式現在只需要幾行程式就能夠完成,而接下來我要講的應該算是使用頻率最高的模組檔案了-Socket模組。

Socket模組是對TCP/IP的封裝與應用,而TCP/IP是傳輸層協定,主要負責資料如何在網路中傳輸。Socket也稱作通訊端,是可以任意使用的(TCP/IP是網路中的規則,無法更改)。可以拿來實現不同虛擬機器或不同電腦的資料交換,應用程式通常透過「通訊端」發送獲回應網路請求。

在Python中提供了兩個基本的Socket模組,分別是服務端及用戶端,當建立一個服務端Socket後,這個Socket會在通訊埠等待連接,等用戶端Socket存取後完成連接就可以互動了。

產生一個實體的Socket

產生實體Socket的格式為:
socket(family, type, [protocol])

family:預設值為socket.AF_INET,通常使用這個預設值即可。
type:用來表示Socket的類型,這邊共有三個-SOCK_STREAM(TCP類型)、SOCK_DGRAM(UDP類型)、SOCK_RAW(原始類型)
protocal:可設定的參數,通常設定值為0,由系統自動選擇。

初始化

初始化TCP類型的Socket:s=socket.socket()
初始化UDP類型的Socket:s=socket.socket(socket.AF_ , socket.SOCK_DGRAM)

Socket常用的函數

  • bind():由服務端呼叫,會將之前建立的Socket與指定的IP位址和通訊埠綁定。
  • listen():用在使用TCP的服務端開啟監聽模式,舉例:a.listen(3)。
  • accept():用在TCP的服務端接收連接,接收後傳回(conn, address),代表新的通訊端物件與連接用戶端的位址。
  • connect():用於使用TCP的用戶端去連接服務端,使用的參數是一個元祖,形式為(hostname, port)。
  • send():用於在使用TCP時發送資料,形式為send(string[,flag]),傳回值式傳送元位組的數量,但可能未將指定的內容全部發送。
  • sendall():與send()的區別就是完整發送TCP資料,形式為sendall(string[,flag]),將string中的資料發送到連接的通訊端。
  • recv():用於使用TCP時接收Socket的資料,資料會以字串形式傳回。
  • sendto():用於在使用UDP時發送資料
  • recvfrom():UDP專用,接收資料後傳回IP位址和通訊埠,但傳回值是(data, address),data是接收資料的字串。
  • close():關閉socket。

撰寫一個簡單的服務端與用戶端

  • Socket服務端
    https://ithelp.ithome.com.tw/upload/images/20240923/20169331DwOi8nAdwv.png

  • Socket用戶端
    https://ithelp.ithome.com.tw/upload/images/20240923/201693318xVAsatxu2.png

可以看到這部分我的服務端與用戶端還無法連接,可能與我先前設定的IP位址有關聯,明天我會先將Socket連接成功再接著下方的主題。


上一篇
熟能生巧(三)(python撰寫練習)
下一篇
Socket服務端與用戶端之間的連接
系列文
讓Python與資安共舞30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言