pub mod portscan{
use pnet::packet::tcp::{ipv4_checksum, MutableTcpPacket};
use std::net::Ipv4Addr;
use crate::tcp::tcp::send_recv_packet;
use crate::tcp::tcp::make_tcp_packet;
use crate::util::util::get_local_ip;
pub fn portscan(dst_addr:Ipv4Addr)->Vec<u16>{
let mut ports: Vec<u16> = Vec::new();
for port in 1..1024 {
let local_port = 32168;
let remote_port = port;
let (src_addr,interface)= get_local_ip().unwrap();
let mut tcp_packet:[u8; 48] = [0; 48];
let mut tcp = MutableTcpPacket::new(&mut tcp_packet).unwrap();
make_tcp_packet(&mut tcp);
tcp.set_source(local_port);
tcp.set_destination(remote_port);
tcp.set_checksum(ipv4_checksum(&tcp.to_immutable(), &src_addr, &dst_addr));
let result = send_recv_packet(&mut tcp,dst_addr,interface);
if result {
ports.push(port);
}
}
return ports;
}
}