feat: added more robust handling of actions
This commit is contained in:
parent
ed13defb07
commit
867464f673
@ -1,6 +1,6 @@
|
||||
use std::{
|
||||
collections::VecDeque,
|
||||
net::{Ipv4Addr, SocketAddr},
|
||||
net::{Ipv4Addr, SocketAddr}, time::Duration,
|
||||
};
|
||||
|
||||
use anyhow::anyhow;
|
||||
@ -8,7 +8,7 @@ use anyhow::anyhow;
|
||||
use log::{debug, info, trace};
|
||||
use nl_sys::{netlink, route};
|
||||
|
||||
use packets::{self, EthernetPacket, IPv4Pkt, TCPPacket, TCPPkt};
|
||||
use packets::{self, EthernetPacket, IPv4Pkt, TCPPacket, TCPPacketBuilder, TCPPkt};
|
||||
use pcap_sys;
|
||||
|
||||
struct PeerInfo {
|
||||
@ -30,6 +30,7 @@ struct TcpSocket {
|
||||
local_rx_last_ack: Option<u32>,
|
||||
state: TcpState,
|
||||
peer_info: Option<PeerInfo>,
|
||||
ack_timeout: Option<Duration>
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
@ -64,7 +65,7 @@ fn connect(
|
||||
remote_addr: Ipv4Addr,
|
||||
remote_port: u16,
|
||||
local_addr: Ipv4Addr,
|
||||
) -> anyhow::Result<TCPPacket> {
|
||||
) -> TCPPacket {
|
||||
socket.state = TcpState::SynSent;
|
||||
let local_port: u16 = loop {
|
||||
let port = rand::random();
|
||||
@ -79,10 +80,22 @@ fn connect(
|
||||
local_port,
|
||||
});
|
||||
|
||||
Ok(())
|
||||
socket.local_seq_no = rand::random();
|
||||
|
||||
TCPPacketBuilder::default()
|
||||
.srcport(local_port)
|
||||
.dstport(remote_port)
|
||||
.
|
||||
.syn(true)
|
||||
.window(64240)
|
||||
.seqnumber(socket.local_seq_no)
|
||||
.build(local_addr, remote_addr, vec![], None)
|
||||
}
|
||||
|
||||
fn process_packet(socket: &mut TcpSocket, packet: TCPPkt<'_>) -> anyhow::Result<Option<TCPPacket>> {
|
||||
fn process_packet(
|
||||
socket: &mut TcpSocket,
|
||||
packet: TCPPkt<'_>,
|
||||
) -> anyhow::Result<Option<(TCPPacketBuilder, Vec<u8>)>> {
|
||||
match socket.state {
|
||||
TcpState::SynSent if packet.ack() && packet.syn() => {}
|
||||
_ => {}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user