0229-UDP 傳送和接收

波尔發表於2024-08-14

環境

  • Time 2022-11-25
  • WSL-Ubuntu 22.04
  • Rust 1.65.0

前言

說明

參考:https://doc.rust-lang.org/std/net/struct.UdpSocket.html

目標

之前透過接收整個 IP 和 UDP 報文來實現了通訊,這裡去除報文頭的細節,直接通訊。

main.rs

UDP 由標準庫直接支援,可以直接使用。
將傳送過來的資訊進行反轉,然後傳送回去。

use std::net::UdpSocket;

fn main() -> std::io::Result<()> {
    let socket = UdpSocket::bind("127.0.0.1:4444")?;

    loop {
        let mut buffer = [0; 1500];
        let (size, src) = socket.recv_from(&mut buffer)?;

        let buffer = &mut buffer[..size];
        buffer.reverse();
        socket.send_to(buffer, src)?;
    }
}

傳送請求

root@jiangbo12490:~# nc -u 127.0.0.1 4444
jiangbo

obgnaijzhangsan

nasgnahz

TCPDUMP 抓包

root@jiangbo12490:~# tcpdump -A -n -i lo port 4444
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on lo, link-type EN10MB (Ethernet), snapshot length 262144 bytes

21:48:11.282710 IP 127.0.0.1.50799 > 127.0.0.1.4444: UDP, length 8
E..$.*@.@............o.\...#jiangbo

21:48:11.282772 IP 127.0.0.1.4444 > 127.0.0.1.50799: UDP, length 8
E..$..@.@.L..........\.o...#
obgnaij
21:48:15.867097 IP 127.0.0.1.50799 > 127.0.0.1.4444: UDP, length 9
E..%.+@.@............o.\...$zhangsan

21:48:15.867157 IP 127.0.0.1.4444 > 127.0.0.1.50799: UDP, length 9
E..%..@.@.K..........\.o...$
nasgnahz

總結

使用 Rust 的標準庫,實現 UDP 的通訊。

附錄

相關文章