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

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

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

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

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

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

1.端口掃描器:探測(cè)開(kāi)放端口

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

import socket

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

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

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

關(guān)鍵方法

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

使用場(chǎng)景

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

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

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

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

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

監(jiān)聽(tīng)端口 8090,接收 HTTP 請(qǐng)求,然后返回簡(jiǎn)單的 Hello, Socket!。

import socket

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("", 8090))
server.listen(5)
print("HTTP 服務(wù)器啟動(dòng),監(jiān)聽(tīng)端口 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端口啟動(dòng)TCP服務(wù)器,接收客戶(hù)端請(qǐng)求后返回固定HTTP響應(yīng),每次請(qǐng)求后立即關(guān)閉連接(短連接)

關(guān)鍵特性

單線程同步:每次處理一個(gè)請(qǐng)求,處理完才能接受新連接

最小HTTP響應(yīng)

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

無(wú)請(qǐng)求解析:忽略客戶(hù)端發(fā)送的實(shí)際請(qǐng)求內(nèi)容

使用場(chǎng)景

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

注意事項(xiàng)

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

測(cè)試方法:瀏覽器訪問(wèn) http://localhost:8090 或使用 curl http://localhost:8090

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

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

簡(jiǎn)單示例:

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"收到來(lái)自 {addr} 的消息: {data.decode()}")

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

關(guān)鍵特性

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

使用場(chǎng)景

  • 局域網(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ā)時(shí)需要異步機(jī)制
  • 安全風(fēng)險(xiǎn)
    • 開(kāi)放端口需配置防火墻
    • 接收任意來(lái)源數(shù)據(jù)可能被攻擊
  • 編碼問(wèn)題
    • 假設(shè)數(shù)據(jù)為UTF-8編碼,可能需處理解碼異常

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

4. 遠(yuǎn)程控制:控制另一臺(tái)計(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端口啟動(dòng)TCP服務(wù),接受客戶(hù)端連接后進(jìn)入交互模式,執(zhí)行客戶(hù)端發(fā)送的系統(tǒng)命令并將結(jié)果返回(類(lèi)似后門(mén)程序)

關(guān)鍵特性

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

使用場(chǎng)景

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

高危風(fēng)險(xiǎn)警告

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

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

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

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

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

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

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

還在用 U 盤(pán)拷貝文件?試試 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ā)送!")

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

關(guān)鍵特性

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

使用場(chǎng)景

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

注意事項(xiàng)

  • 服務(wù)端匹配

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

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

安全提示

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

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

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

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

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端口啟動(dòng)TCP服務(wù),當(dāng)客戶(hù)端連接時(shí),隨機(jī)選擇一個(gè)預(yù)設(shè)IP地址返回,立即關(guān)閉連接(單次響應(yīng)模式)

工作流程

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

使用場(chǎng)景

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

關(guān)鍵特性

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

注意事項(xiàng)

  • 功能限制

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

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

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

測(cè)試方法

使用telnet或nc工具測(cè)試:

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

該代碼適用于小型內(nèi)部系統(tǒng)的簡(jiǎn)易服務(wù)發(fā)現(xiàn),生產(chǎn)環(huán)境建議使用成熟方案(如Nginx負(fù)載均衡、Consul服務(wù)發(fā)現(xiàn))。需配合客戶(hù)端邏輯實(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):在客戶(hù)端(8888端口)和目標(biāo)服務(wù)器(example.com:80)之間建立雙向通道
  • 單次轉(zhuǎn)發(fā):每次連接僅處理一次請(qǐng)求/響應(yīng)(短連接模式)
  • 協(xié)議透明:適用于任意TCP協(xié)議(HTTP/HTTPS等)

工作流程

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

關(guān)鍵特性

  • 同步阻塞:?jiǎn)尉€程順序處理,無(wú)法并發(fā)
  • 緩沖區(qū)限制:?jiǎn)未巫疃鄠鬏?KB數(shù)據(jù)
  • 目標(biāo)固定:所有流量都轉(zhuǎn)發(fā)到example.com:80

使用場(chǎng)景

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

局限性及風(fēng)險(xiǎn)

  • 性能問(wèn)題: • 每次連接新建socket,高并發(fā)時(shí)資源消耗大 • 未實(shí)現(xiàn)流式傳輸(大文件會(huì)截?cái)啵?/li>
  • 功能缺陷: • 無(wú)法動(dòng)態(tài)修改目標(biāo)地址 • 不支持HTTPS等加密協(xié)議 • 無(wú)錯(cuò)誤處理(連接失敗導(dǎo)致崩潰)
  • 安全風(fēng)險(xiǎn): • 開(kāi)放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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

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

    一篇文章搞懂Python的類(lèi)與對(duì)象名稱(chēng)空間

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

    Python中的裝飾器使用

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

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

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

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

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

    基于Python制作簡(jiǎn)單的音樂(lè)播放器

    這篇文章主要為大家詳細(xì)介紹了如何基于Python制作簡(jiǎn)單的音樂(lè)播放器,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以了解下
    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的簡(jiǎn)單操作,現(xiàn)在學(xué)習(xí)當(dāng)前的pygame怎么加載圖片,下面這篇文章主要給大家介紹了關(guān)于使用PyGame顯示圖像的四種方案,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • Pygame游戲開(kāi)發(fā)之太空射擊實(shí)戰(zhàn)精靈的使用上篇

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

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

最新評(píng)論