iT邦幫忙

2023 iThome 鐵人賽

DAY 2
0
Security

為駭而生 - Python 系列 第 4

Day 04 - UDP 客戶端(Client) & 回聲伺服器(Echo Server)

  • 分享至 

  • xImage
  •  

Sharpen Python skills in the field of cybersecurity.
讓在資安領域我們磨利Python技術。

目錄

  • UDP 客戶端(Client)
  • 回聲伺服器(Server) & 客戶端(Client)

看文前, 你應該要具備以下基礎能力:


Let's get started! 開始吧!


如果你想複習什是TCP和UDP...

⭐ 可以查看上一篇教學

🔸UDP客戶端(UDP Client)

⭐ 如果你想知道什麼是字母'b'代表的意思 | StackOverflow

  • sendto(): 代表傳送資料到伺服器
  • UDP: 無連接式通訊(connectionless protocol), 所以在這之前沒有呼叫connect()
  • recvfrom(): 接收回傳資料
#udp_client.py

import socket

HOST = "127.0.0.1" 
PORT = 9997

client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

client.sendto(b"AAABBBCCC",(HOST, PORT))

data, addr = client.recvfrom(4096)

print(data.decode())
client.close()


Echo Server & Client

⭐ 例子來自 Real Python

來看看到底伺服器和客戶端如何運作。
這個伺服器將回聲任何接收到的資料

# echo-client.py

import socket

HOST = "127.0.0.1"  # The server's hostname or IP address
PORT = 65432  # The port used by the server

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(b"Hello, world")
    data = s.recv(1024)

print(f"Received {data!r}")

# echo_server.py

import socket

HOST = "127.0.0.1"  # Standard loopback interface address (localhost)
PORT = 65432  # Port to listen on (non-privileged ports are > 1023)

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    conn, addr = s.accept()
    with conn:
        print(f"Connected by {addr}")
        while True:
            data = conn.recv(1024)
            if not data:
                break
            conn.sendall(data)

先跑伺服器,再跑客戶端。



Hooray!


Reference參考資料


上一篇
Day 03 - Networking概念、在Kali使用Python、 Sockets & TCP客戶端
下一篇
Day 05 - TCP伺服器(Server) & 客戶端(Client)
系列文
為駭而生 - Python 18
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言