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

揭秘Python?Socket網絡編程的7種硬核用法

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

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

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

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

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

還在手動檢查服務器端口?那你可就太 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)  # 設置超時時間,加快掃描速度
        if s.connect_ex((ip, port)) == 0:
            print(f"? 端口 {port} 開放")
        s.close()

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

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

關鍵方法

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

使用場景

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

局限性及注意事項

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

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

2.簡易 HTTP 服務器:10 秒搭個網頁

監(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 服務器啟動,監(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服務器,接收客戶端請求后返回固定HTTP響應,每次請求后立即關閉連接(短連接)

關鍵特性

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

最小HTTP響應

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

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

使用場景

  • 快速測試網絡連通性
  • 學習socket編程基礎
  • 開發(fā)簡單網絡服務原型

注意事項

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

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

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

游戲開發(fā)離不開網絡通信,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服務,持續(xù)接收并顯示客戶端發(fā)送的數(shù)據(jù)報文,支持同時接收多個客戶端的消息

關鍵特性

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

使用場景

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

注意事項

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

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

4. 遠程控制:控制另一臺計算機

想遠程控制服務器?用 Socket 輕松實現(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服務,接受客戶端連接后進入交互模式,執(zhí)行客戶端發(fā)送的系統(tǒng)命令并將結果返回(類似后門程序)

關鍵特性

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

使用場景

  • 滲透測試:模擬遠程控制軟件行為
  • 內網管理工具:需配合嚴格權限控制
  • 網絡編程教學:演示基礎C/S架構

高危風險警告

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

注意事項(切勿用于生產環(huán)境)

  • 該代碼實際是高危后門程序
  • 運行后會暴露服務器完全控制權
  • 可能違反《網絡安全法》等法律法規(guī)

建議學習時在虛擬機環(huán)境測試,實際應用需至少添加:

  • SSL/TLS加密通信
  • 客戶端身份驗證
  • 命令白名單機制
  • 權限隔離措施

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

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客戶端連接到本機9999端口,讀取本地file.txt文件內容,將文件內容通過TCP連接完整發(fā)送

關鍵特性

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

使用場景

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

注意事項

  • 服務端匹配

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

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

安全提示

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

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

6. 負載均衡:提高服務器性能

大型網站都用負載均衡來提高訪問速度,我們可以用 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服務,當客戶端連接時,隨機選擇一個預設IP地址返回,立即關閉連接(單次響應模式)

工作流程

客戶端連接 → 服務器隨機選擇IP → 返回IP → 斷開連接

使用場景

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

關鍵特性

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

注意事項

  • 功能限制

    • 未驗證客戶端身份
    • 無心跳檢測,無法感知目標服務器狀態(tài)
    • 隨機分配可能造成負載不均
  • 安全風險

    • 開放端口可能被DDoS攻擊
    • 返回內部IP可能泄露網絡拓撲
    • 建議添加HTTPS加密通信
  • 協(xié)議規(guī)范

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

測試方法

使用telnet或nc工具測試:

$ nc localhost 8000
192.168.1.3  # 隨機返回其中一個IP

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

7.網絡代理服務器

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()
  • 流量中轉:在客戶端(8888端口)和目標服務器(example.com:80)之間建立雙向通道
  • 單次轉發(fā):每次連接僅處理一次請求/響應(短連接模式)
  • 協(xié)議透明:適用于任意TCP協(xié)議(HTTP/HTTPS等)

工作流程

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

關鍵特性

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

使用場景

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

局限性及風險

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

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

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

相關文章

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

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

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

    Python基礎之矩陣輸入的實例

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

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

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

    Python中的裝飾器使用

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評論