From 0ef459bcfecb8362009752c31938a4be261fa04b Mon Sep 17 00:00:00 2001 From: Andrew Rioux Date: Thu, 14 Sep 2023 01:30:29 -0400 Subject: [PATCH] feat: added framework for TCP client --- .devcontainer/Dockerfile.alpine | 2 +- Cargo.lock | 123 ++++++++++++++++++++++++++---- Cargo.toml | 1 + Makefile.toml | 7 ++ tcp-test/client/Cargo.toml | 12 +++ tcp-test/client/src/main.rs | 4 + tcp-test/sample-connection.pcapng | Bin 0 -> 1264 bytes tcp-test/server.py | 13 ++++ 8 files changed, 148 insertions(+), 14 deletions(-) create mode 100644 tcp-test/client/Cargo.toml create mode 100644 tcp-test/client/src/main.rs create mode 100644 tcp-test/sample-connection.pcapng create mode 100644 tcp-test/server.py diff --git a/.devcontainer/Dockerfile.alpine b/.devcontainer/Dockerfile.alpine index d63ebe5..729edd5 100644 --- a/.devcontainer/Dockerfile.alpine +++ b/.devcontainer/Dockerfile.alpine @@ -15,7 +15,7 @@ FROM rust:1-alpine -RUN apk add cmake make automake musl-dev autoconf libtool \ +RUN apk add cmake make automake musl-dev autoconf libtool libcap \ flex bison linux-headers openssl-dev lldb build-base libcap-dev RUN apk add mingw-w64-gcc mingw-w64-winpthreads mingw-w64-headers && \ diff --git a/Cargo.lock b/Cargo.lock index 4eda7b6..9282e81 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -264,7 +264,7 @@ checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" dependencies = [ "byteorder", "digest", - "rand_core", + "rand_core 0.5.1", "subtle", "zeroize", ] @@ -301,7 +301,7 @@ dependencies = [ "digest", "hex", "hkdf", - "rand", + "rand 0.7.3", "serde", "sha2", "thiserror", @@ -326,7 +326,7 @@ checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" dependencies = [ "curve25519-dalek", "ed25519", - "rand", + "rand 0.7.3", "serde", "serde_bytes", "sha2", @@ -395,7 +395,7 @@ name = "ex-bind-shell-key-generator" version = "0.1.0" dependencies = [ "ed25519-dalek", - "rand", + "rand 0.7.3", ] [[package]] @@ -534,6 +534,17 @@ dependencies = [ "wasi 0.9.0+wasi-snapshot-preview1", ] +[[package]] +name = "getrandom" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", +] + [[package]] name = "ghash" version = "0.3.1" @@ -627,6 +638,16 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" +[[package]] +name = "lock_api" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +dependencies = [ + "autocfg", + "scopeguard", +] + [[package]] name = "log" version = "0.4.17" @@ -719,6 +740,29 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" name = "packets" version = "0.1.0" +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.48.0", +] + [[package]] name = "paste" version = "1.0.14" @@ -860,13 +904,24 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ - "getrandom", + "getrandom 0.1.16", "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.2.2", + "rand_core 0.5.1", "rand_hc", ] +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + [[package]] name = "rand_chacha" version = "0.2.2" @@ -874,7 +929,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", ] [[package]] @@ -883,7 +948,16 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" dependencies = [ - "getrandom", + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.10", ] [[package]] @@ -892,7 +966,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" dependencies = [ - "rand_core", + "rand_core 0.5.1", ] [[package]] @@ -964,6 +1038,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + [[package]] name = "semver" version = "0.9.0" @@ -1069,6 +1149,12 @@ dependencies = [ "autocfg", ] +[[package]] +name = "smallvec" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" + [[package]] name = "socket2" version = "0.5.3" @@ -1088,7 +1174,7 @@ dependencies = [ "ecies-ed25519", "ed25519-dalek", "libc", - "rand", + "rand 0.7.3", "raw_tty", "rmp-serde", "serde", @@ -1104,7 +1190,7 @@ version = "0.1.0" dependencies = [ "ecies-ed25519", "ed25519-dalek", - "rand", + "rand 0.7.3", "serde", "serde_repr", ] @@ -1122,7 +1208,7 @@ dependencies = [ "log", "packets", "pcap-sys", - "rand", + "rand 0.7.3", "rmp-serde", "serde", "simple_logger", @@ -1206,6 +1292,16 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "tcp-test" +version = "0.1.0" +dependencies = [ + "nl-sys", + "pcap-sys", + "rand 0.8.5", + "tokio", +] + [[package]] name = "tempfile" version = "3.8.0" @@ -1288,6 +1384,7 @@ dependencies = [ "libc", "mio", "num_cpus", + "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", diff --git a/Cargo.toml b/Cargo.toml index 4edf42f..2401f91 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,6 +5,7 @@ members = [ "examples/*/*", "sparse-protocol", "sparse-05/*", + "tcp-test/client" ] resolver = "2" diff --git a/Makefile.toml b/Makefile.toml index 8aaaf47..7666d97 100644 --- a/Makefile.toml +++ b/Makefile.toml @@ -27,6 +27,13 @@ script = [ "docker-compose run build build --bin sparse-05-client ${@}", ] +[tasks.tcp-test] +workspace = false +script = [ + "docker-compose run build build --bin tcp-test ${@}", + "docker-compose run --entrypoint=setcap build cap_net_raw=eip /workspaces/sparse/target/debug/tcp-test" +] + [tasks.fmt] command = "cargo" args = ["fmt"] diff --git a/tcp-test/client/Cargo.toml b/tcp-test/client/Cargo.toml new file mode 100644 index 0000000..c3f6221 --- /dev/null +++ b/tcp-test/client/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "tcp-test" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +pcap-sys = { path = "../../pcap-sys" } +nl-sys = { path = "../../nl-sys" } +rand = "0.8.5" +tokio = { version = "1.32.0", features = ["full"] } diff --git a/tcp-test/client/src/main.rs b/tcp-test/client/src/main.rs new file mode 100644 index 0000000..7e3d561 --- /dev/null +++ b/tcp-test/client/src/main.rs @@ -0,0 +1,4 @@ +#[tokio::main] +async fn main() { + println!("Hello, world!"); +} diff --git a/tcp-test/sample-connection.pcapng b/tcp-test/sample-connection.pcapng new file mode 100644 index 0000000000000000000000000000000000000000..ba5b4857442b9e9e8f21f0d9cc59c4f5050f4eef GIT binary patch literal 1264 zcmd<$<>gwzz`)>Zqb|Fi;MG%6g0{+OEMIKgI!JZj5HY-7?>G^7<@AGN-Gr1^o;c^b<hkoh2cK=y&G0@<^9e@ha` zA0Uiu&!R_QdrUY2K=zmvf$RWbXt-VZn|ewc)h{4>HeUsq4YC7d7tD^iEv;Dn!fXq+ z!-69aY)3B0d=N&l1H&(yuNLHE_sh>|tyulyl?JxQ`4~UuK@eZbxk-#14)ikR2ukAoD>O>X#ef@DfChd(`kkwu9*=Qz|GvKo~hrUNb=K z_+bvR!=(#kJ_sZE<0hIv{-5)M#0e`>-t=N+W02C^=+DR?!{D4>npcuqRIE@?lwX#a zlA5BBRH={xDMXkUI2b@`O`ad}V}`ONG&lOQFmN#N|6l?I2?Hww2bhKtpgaix8QUR1 literal 0 HcmV?d00001 diff --git a/tcp-test/server.py b/tcp-test/server.py new file mode 100644 index 0000000..680551f --- /dev/null +++ b/tcp-test/server.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 + +import socket + +server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + +server.bind(("0.0.0.0", 54248)) +server.listen(32) + +client, addr = server.accept() +with client: + print(client.recv(24)) + client.sendall(b"pong")