欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

揭秘Python?Socket網(wǎng)絡(luò)編程的7種硬核用法

 更新時間:2025年04月03日 15:35:22   作者:花小姐的春天  
Socket?不僅能做聊天室,還能干一大堆硬核操作,這篇文章就帶大家看看?Python?網(wǎng)絡(luò)編程的7種超實(shí)用玩法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

上周老板拍著我的肩膀說:“小花啊,我們需要一個在線客服系統(tǒng),你用 Python 搞個 Socket 聊天室吧!”

我心里嘀咕:Socket 不就發(fā)發(fā)消息、寫個聊天室?這玩意兒能有什么花頭?

結(jié)果一查,哎喲,好家伙,Socket 不僅能做聊天室,還能干一大堆硬核操作!今天就帶大家看看 Python 網(wǎng)絡(luò)編程的 7 種超實(shí)用玩法,學(xué)會了你就是公司最靚的仔!

1.端口掃描器:探測開放端口

還在手動檢查服務(wù)器端口?那你可就太 low 了!用 Python 搞個端口掃描器,幾秒鐘就能搞定:

import socket

def scan_ports(ip, start=1, end=65535):
    print(f"開始掃描 {ip} 上的端口...")
    for port in range(start, end + 1):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(0.5)  # 設(shè)置超時時間,加快掃描速度
        if s.connect_ex((ip, port)) == 0:
            print(f"? 端口 {port} 開放")
        s.close()

# 掃描本機(jī)所有端口
scan_ports("127.0.0.1")

掃描邏輯: 通過嘗試與目標(biāo)主機(jī)的每個端口建立TCP連接(全連接掃描),根據(jù)連接結(jié)果判斷端口開放狀態(tài)

關(guān)鍵方法

  • socket.socket():創(chuàng)建IPv4 TCP套接字
  • connect_ex():比connect()更優(yōu),返回錯誤碼而非拋出異常(0表示成功)
  • settimeout(0.5):防止在無響應(yīng)端口上長時間阻塞

使用場景

  • 快速檢查本地服務(wù)開放情況(如測試Web服務(wù)器/數(shù)據(jù)庫端口)
  • 小型網(wǎng)絡(luò)環(huán)境中的簡單掃描

局限性及注意事項(xiàng)

  • 效率問題:順序掃描65535端口約需9小時(理想情況),建議:
    • 使用多線程/異步IO加速
    • 優(yōu)先掃描常用端口(如80,443,22,3306等)
  • 權(quán)限要求:掃描1024以下端口需要管理員權(quán)限
  • 隱蔽性差:全連接掃描易被防火墻/IDS檢測
  • 法律風(fēng)險:掃描他人網(wǎng)絡(luò)可能違法,僅限授權(quán)測試

建議在實(shí)際使用中考慮使用專業(yè)掃描工具(如nmap),并遵守網(wǎng)絡(luò)安全法律法規(guī)。該代碼更適合用于學(xué)習(xí)網(wǎng)絡(luò)編程基礎(chǔ)原理。

2.簡易 HTTP 服務(wù)器:10 秒搭個網(wǎng)頁

監(jiān)聽端口 8090,接收 HTTP 請求,然后返回簡單的 Hello, Socket!

import socket

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("", 8090))
server.listen(5)
print("HTTP 服務(wù)器啟動,監(jiān)聽端口 8090...")

while True:
    client, addr = server.accept()
    request = client.recv(1024)
    response = "HTTP/1.1 200 OK\n\nHello, Socket!"
    client.sendall(response.encode())
    client.close()

在本地8090端口啟動TCP服務(wù)器,接收客戶端請求后返回固定HTTP響應(yīng),每次請求后立即關(guān)閉連接(短連接)

關(guān)鍵特性

單線程同步:每次處理一個請求,處理完才能接受新連接

最小HTTP響應(yīng)

HTTP/1.1 200 OK       ← 狀態(tài)行
                    ← 空行(兩個換行符)
Hello, Socket!       ← 響應(yīng)體

無請求解析:忽略客戶端發(fā)送的實(shí)際請求內(nèi)容

使用場景

  • 快速測試網(wǎng)絡(luò)連通性
  • 學(xué)習(xí)socket編程基礎(chǔ)
  • 開發(fā)簡單網(wǎng)絡(luò)服務(wù)原型

注意事項(xiàng)

  • 性能限制
    • 無法并發(fā)處理請求
    • 超過5個連接請求會被拒絕
  • 功能缺失
    • 不解析HTTP請求
    • 沒有錯誤處理
    • 不支持持久連接
  • 安全風(fēng)險:實(shí)際生產(chǎn)環(huán)境應(yīng)使用成熟框架(如Flask/Django)

測試方法:瀏覽器訪問 http://localhost:8090 或使用 curl http://localhost:8090

3.局域網(wǎng)游戲:多人聯(lián)機(jī)對戰(zhàn)

游戲開發(fā)離不開網(wǎng)絡(luò)通信,Socket 就是幕后功臣!

簡單示例:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(("", 9999))
print("等待數(shù)據(jù)...")

while True:
    data, addr = s.recvfrom(1024)
    print(f"收到來自 {addr} 的消息: {data.decode()}")

在本地9999端口啟動UDP服務(wù),持續(xù)接收并顯示客戶端發(fā)送的數(shù)據(jù)報(bào)文,支持同時接收多個客戶端的消息

關(guān)鍵特性

  • 無連接協(xié)議:不需要建立連接(對比TCP的三次握手)
  • 數(shù)據(jù)報(bào)文模式:每次接收完整的數(shù)據(jù)包
  • 被動接收:持續(xù)等待客戶端主動發(fā)送數(shù)據(jù)

使用場景

  • 局域網(wǎng)聊天程序
  • 傳感器數(shù)據(jù)采集(如IoT設(shè)備)
  • 網(wǎng)絡(luò)狀態(tài)監(jiān)控
  • 廣播/組播應(yīng)用

注意事項(xiàng)

  • 數(shù)據(jù)完整性
    • UDP不保證數(shù)據(jù)順序和可靠性
    • 大消息可能被截?cái)啵ㄗ畲蠼邮?024字節(jié))
  • 并發(fā)處理
    • 默認(rèn)單線程處理,高并發(fā)時需要異步機(jī)制
  • 安全風(fēng)險
    • 開放端口需配置防火墻
    • 接收任意來源數(shù)據(jù)可能被攻擊
  • 編碼問題
    • 假設(shè)數(shù)據(jù)為UTF-8編碼,可能需處理解碼異常

測試方法:使用 nc -u 目標(biāo)IP 9999 發(fā)送測試消息,或配合UDP客戶端代碼使用。適用于需要低延遲但允許丟包的場景。

4. 遠(yuǎn)程控制:控制另一臺計(jì)算機(jī)

想遠(yuǎn)程控制服務(wù)器?用 Socket 輕松實(shí)現(xiàn):

import socket
import subprocess

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("", 9999))
s.listen(1)
print("等待連接...")

conn, addr = s.accept()
print(f"連接自 {addr}")
while True:
    cmd = conn.recv(1024).decode()
    output = subprocess.getoutput(cmd)
    conn.send(output.encode())

在本地9999端口啟動TCP服務(wù),接受客戶端連接后進(jìn)入交互模式,執(zhí)行客戶端發(fā)送的系統(tǒng)命令并將結(jié)果返回(類似后門程序)

關(guān)鍵特性

  • 命令執(zhí)行:通過subprocess模塊直接執(zhí)行接收到的字符串命令
  • 持續(xù)交互:保持連接直到客戶端斷開
  • 單客戶端模式listen(1)限制同時只能處理一個連接

使用場景

  • 滲透測試:模擬遠(yuǎn)程控制軟件行為
  • 內(nèi)網(wǎng)管理工具:需配合嚴(yán)格權(quán)限控制
  • 網(wǎng)絡(luò)編程教學(xué):演示基礎(chǔ)C/S架構(gòu)

高危風(fēng)險警告

  • 致命漏洞
    • 開放端口無身份驗(yàn)證,允許任意客戶端連接
    • 直接執(zhí)行原始命令,可被注入危險指令(如rm -rf /
  • 數(shù)據(jù)安全
    • 通信未加密,可能被中間人篡改
  • 系統(tǒng)風(fēng)險
    • 客戶端可執(zhí)行任意系統(tǒng)命令,等同于完全控制系統(tǒng)

注意事項(xiàng)(切勿用于生產(chǎn)環(huán)境)

  • 該代碼實(shí)際是高危后門程序
  • 運(yùn)行后會暴露服務(wù)器完全控制權(quán)
  • 可能違反《網(wǎng)絡(luò)安全法》等法律法規(guī)

建議學(xué)習(xí)時在虛擬機(jī)環(huán)境測試,實(shí)際應(yīng)用需至少添加:

  • SSL/TLS加密通信
  • 客戶端身份驗(yàn)證
  • 命令白名單機(jī)制
  • 權(quán)限隔離措施

測試方法:使用 nc 目標(biāo)IP 9999 連接后直接輸入系統(tǒng)命令(如whoami),適用于理解網(wǎng)絡(luò)通信原理,但必須注意法律和道德邊界。

5. 文件傳輸:快速共享文件

還在用 U 盤拷貝文件?試試 Python 版 FTP:

import socket

s = socket.socket()
s.connect(("127.0.0.1", 9999))
with open("file.txt", "rb") as f:
    s.sendall(f.read())
print("文件已發(fā)送!")

作為TCP客戶端連接到本機(jī)9999端口,讀取本地file.txt文件內(nèi)容,將文件內(nèi)容通過TCP連接完整發(fā)送

關(guān)鍵特性

  • 二進(jìn)制傳輸rb模式確保文件無編碼轉(zhuǎn)換
  • 單次發(fā)送sendall()保證發(fā)送全部數(shù)據(jù)(對比send()可能分多次)
  • 自動清理with語句確保文件正確關(guān)閉

使用場景

  • 配合文件接收服務(wù)端(需另寫)實(shí)現(xiàn)文件傳輸
  • 快速測試網(wǎng)絡(luò)傳輸功能
  • 小型數(shù)據(jù)同步工具原型

注意事項(xiàng)

  • 服務(wù)端匹配

    • 需要對應(yīng)的TCP文件接收服務(wù)器(非之前示例的命令執(zhí)行服務(wù)器)
    • 當(dāng)前代碼若連接到之前的命令服務(wù)器會導(dǎo)致協(xié)議混亂
  • 潛在問題

    • 大文件可能導(dǎo)致內(nèi)存溢出(一次性讀取全部內(nèi)容)
    • 無傳輸驗(yàn)證機(jī)制(接收方是否正確接收未知)
    • 無錯誤處理(如文件不存在、連接失敗等情況)

安全提示

  • 傳輸敏感文件需使用加密協(xié)議(如SFTP)
  • 開放端口需配置防火墻規(guī)則
  • 實(shí)際應(yīng)用應(yīng)添加文件校驗(yàn)(如MD5校驗(yàn)和)

測試方法:需先運(yùn)行支持文件接收的TCP服務(wù)器(需另寫),再執(zhí)行此客戶端代碼。適合學(xué)習(xí)基礎(chǔ)網(wǎng)絡(luò)傳輸原理,生產(chǎn)環(huán)境建議使用成熟的文件傳輸協(xié)議(如FTP/SCP)。

6. 負(fù)載均衡:提高服務(wù)器性能

大型網(wǎng)站都用負(fù)載均衡來提高訪問速度,我們可以用 Socket 模擬一個:

import socket
import random

targets = ["192.168.1.2", "192.168.1.3", "192.168.1.4"]

s = socket.socket()
s.bind(("", 8000))
s.listen(5)

while True:
    conn, addr = s.accept()
    target = random.choice(targets)
    conn.send(target.encode())
    conn.close()

在本地8000端口啟動TCP服務(wù),當(dāng)客戶端連接時,隨機(jī)選擇一個預(yù)設(shè)IP地址返回,立即關(guān)閉連接(單次響應(yīng)模式)

工作流程

客戶端連接 → 服務(wù)器隨機(jī)選擇IP → 返回IP → 斷開連接

使用場景

  • 簡易負(fù)載均衡(隨機(jī)分配客戶端到不同服務(wù)器)
  • 客戶端重定向服務(wù)
  • 多節(jié)點(diǎn)服務(wù)的入口分配

關(guān)鍵特性

  • 無狀態(tài)交互:每次連接僅響應(yīng)一次
  • 隨機(jī)分配策略:使用random.choice簡單輪換
  • 高并發(fā)基礎(chǔ)listen(5)允許短暫排隊(duì)

注意事項(xiàng)

  • 功能限制

    • 未驗(yàn)證客戶端身份
    • 無心跳檢測,無法感知目標(biāo)服務(wù)器狀態(tài)
    • 隨機(jī)分配可能造成負(fù)載不均
  • 安全風(fēng)險

    • 開放端口可能被DDoS攻擊
    • 返回內(nèi)部IP可能泄露網(wǎng)絡(luò)拓?fù)?/li>
    • 建議添加HTTPS加密通信
  • 協(xié)議規(guī)范

    • 客戶端應(yīng)驗(yàn)證接收數(shù)據(jù)的有效性
    • 建議使用JSON格式擴(kuò)展更多信息:

測試方法

使用telnet或nc工具測試:

$ nc localhost 8000
192.168.1.3  # 隨機(jī)返回其中一個IP

該代碼適用于小型內(nèi)部系統(tǒng)的簡易服務(wù)發(fā)現(xiàn),生產(chǎn)環(huán)境建議使用成熟方案(如Nginx負(fù)載均衡、Consul服務(wù)發(fā)現(xiàn))。需配合客戶端邏輯實(shí)現(xiàn)真正的重定向功能。

7.網(wǎng)絡(luò)代理服務(wù)器

import socket

proxy = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
proxy.bind(("", 8888))
proxy.listen(5)

while True:
    client, addr = proxy.accept()
    target = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    target.connect(("example.com", 80))
    data = client.recv(4096)
    target.sendall(data)
    response = target.recv(4096)
    client.sendall(response)
    client.close()
    target.close()
  • 流量中轉(zhuǎn):在客戶端(8888端口)和目標(biāo)服務(wù)器(example.com:80)之間建立雙向通道
  • 單次轉(zhuǎn)發(fā):每次連接僅處理一次請求/響應(yīng)(短連接模式)
  • 協(xié)議透明:適用于任意TCP協(xié)議(HTTP/HTTPS等)

工作流程

客戶端 → 代理:8888 → example.com:80
   │                   ↑
   │                   │
   └───────────────────┘

關(guān)鍵特性

  • 同步阻塞:單線程順序處理,無法并發(fā)
  • 緩沖區(qū)限制:單次最多傳輸4KB數(shù)據(jù)
  • 目標(biāo)固定:所有流量都轉(zhuǎn)發(fā)到example.com:80

使用場景

  • 本地調(diào)試:將流量導(dǎo)向測試服務(wù)器
  • 協(xié)議分析:觀察原始TCP數(shù)據(jù)流
  • 簡易網(wǎng)關(guān):實(shí)現(xiàn)端口映射功能

局限性及風(fēng)險

  • 性能問題: • 每次連接新建socket,高并發(fā)時資源消耗大 • 未實(shí)現(xiàn)流式傳輸(大文件會截?cái)啵?/li>
  • 功能缺陷: • 無法動態(tài)修改目標(biāo)地址 • 不支持HTTPS等加密協(xié)議 • 無錯誤處理(連接失敗導(dǎo)致崩潰)
  • 安全風(fēng)險: • 開放8888端口可能被濫用 • 明文傳輸敏感數(shù)據(jù)

該代碼適合學(xué)習(xí)基礎(chǔ)網(wǎng)絡(luò)轉(zhuǎn)發(fā)原理,生產(chǎn)環(huán)境建議使用成熟代理工具(如Nginx、Squid)。如需實(shí)現(xiàn)完整代理協(xié)議,需處理HTTP頭中的Host字段和連接復(fù)用等機(jī)制。

到此這篇關(guān)于揭秘Python Socket網(wǎng)絡(luò)編程的7種硬核用法的文章就介紹到這了,更多相關(guān)Python Socket內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python模塊、包和發(fā)布模塊示例代碼

    Python模塊、包和發(fā)布模塊示例代碼

    模塊是python程序架構(gòu)的一個核心概念,模塊名同樣也是一個標(biāo)識符,需要符合標(biāo)識符的命名規(guī)則,接下來通過本文給大家講解Python模塊、包和發(fā)布模塊,需要的朋友可以參考下
    2023-01-01
  • Python基礎(chǔ)之矩陣輸入的實(shí)例

    Python基礎(chǔ)之矩陣輸入的實(shí)例

    這篇文章主要介紹了Python基礎(chǔ)之矩陣輸入的實(shí)例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 一篇文章搞懂Python的類與對象名稱空間

    一篇文章搞懂Python的類與對象名稱空間

    這篇文章主要給大家介紹了關(guān)于Python的類與對象名稱空間的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • Python中的裝飾器使用

    Python中的裝飾器使用

    這篇文章主要介紹了Python中的裝飾器使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • tensorflow 環(huán)境變量設(shè)置方式

    tensorflow 環(huán)境變量設(shè)置方式

    今天小編就為大家分享一篇tensorflow 環(huán)境變量設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python實(shí)現(xiàn)對doc,txt,xls文檔的讀寫操作

    python實(shí)現(xiàn)對doc,txt,xls文檔的讀寫操作

    這篇文章主要介紹了python實(shí)現(xiàn)對doc,txt,xls文檔的讀寫操作,正如標(biāo)題所見,文章包括三個部分python實(shí)現(xiàn)對doc文檔的讀取、python實(shí)現(xiàn)對txt文檔的讀取和python實(shí)現(xiàn)對xls表格的讀取,需要的朋友可以參考一下
    2022-04-04
  • 基于Python制作簡單的音樂播放器

    基于Python制作簡單的音樂播放器

    這篇文章主要為大家詳細(xì)介紹了如何基于Python制作簡單的音樂播放器,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,有需要的小伙伴可以了解下
    2024-02-02
  • Python?Flask實(shí)現(xiàn)圖片上傳與下載的示例詳解

    Python?Flask實(shí)現(xiàn)圖片上傳與下載的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用Python和Flask實(shí)現(xiàn)圖片上傳與下載(支持漂亮的拖拽上傳),文中示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-05-05
  • 使用PyGame顯示圖像的四種方案實(shí)例代碼

    使用PyGame顯示圖像的四種方案實(shí)例代碼

    由于前面學(xué)習(xí)了使用pygame的簡單操作,現(xiàn)在學(xué)習(xí)當(dāng)前的pygame怎么加載圖片,下面這篇文章主要給大家介紹了關(guān)于使用PyGame顯示圖像的四種方案,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • Pygame游戲開發(fā)之太空射擊實(shí)戰(zhàn)精靈的使用上篇

    Pygame游戲開發(fā)之太空射擊實(shí)戰(zhàn)精靈的使用上篇

    相信大多數(shù)8090后都玩過太空射擊游戲,在過去游戲不多的年代太空射擊自然屬于經(jīng)典好玩的一款了,今天我們來自己動手實(shí)現(xiàn)它,在編寫學(xué)習(xí)中回顧過往展望未來,下面開始講解精靈的使用
    2022-08-08

最新評論