Skip to content

Commit

Permalink
增加输出端口映射和ip代理内容
Browse files Browse the repository at this point in the history
  • Loading branch information
vnt-dev committed May 10, 2024
1 parent 3b1236c commit 9df324f
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 6 deletions.
4 changes: 4 additions & 0 deletions vnt-cli/src/command/entity.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use serde::{Deserialize, Serialize};
use std::net::{Ipv4Addr, SocketAddr};
#[derive(Serialize, Deserialize, Debug)]
pub struct Info {
pub name: String,
Expand All @@ -13,6 +14,9 @@ pub struct Info {
pub ipv6_addr: String,
pub up: u64,
pub down: u64,
pub port_mapping_list: Vec<(bool, SocketAddr, String)>,
pub in_ips: Vec<(u32, u32, Ipv4Addr)>,
pub out_ips: Vec<(u32, u32)>,
}

#[derive(Serialize, Deserialize, Debug)]
Expand Down
6 changes: 6 additions & 0 deletions vnt-cli/src/command/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,9 @@ pub fn command_info(vnt: &Vnt) -> Info {
.unwrap_or("None".to_string());
let up = vnt.up_stream();
let down = vnt.down_stream();
let port_mapping_list = vnt.config().port_mapping_list.clone();
let in_ips = vnt.config().in_ips.clone();
let out_ips = vnt.config().out_ips.clone();
Info {
name,
virtual_ip,
Expand All @@ -198,5 +201,8 @@ pub fn command_info(vnt: &Vnt) -> Info {
ipv6_addr,
up,
down,
port_mapping_list,
in_ips,
out_ips,
}
}
46 changes: 42 additions & 4 deletions vnt-cli/src/console_out/mod.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use console::{style, Style};
use std::net::Ipv4Addr;

use crate::command::entity::{DeviceItem, Info, RouteItem};

Expand All @@ -9,17 +10,54 @@ pub fn console_info(status: Info) {
println!("Virtual ip: {}", style(status.virtual_ip).green());
println!("Virtual gateway: {}", style(status.virtual_gateway).green());
println!("Virtual netmask: {}", style(status.virtual_netmask).green());
println!(
"Connection status: {}",
style(status.connect_status).green()
);
if status.connect_status.eq_ignore_ascii_case("Connected") {
println!(
"Connection status: {}",
style(status.connect_status).green()
);
} else {
println!("Connection status: {}", style(status.connect_status).red());
}

println!("NAT type: {}", style(status.nat_type).green());
println!("Relay server: {}", style(status.relay_server).green());
println!("Public ips: {}", style(status.public_ips).green());
println!("Local addr: {}", style(status.local_addr).green());
println!("IPv6: {}", style(status.ipv6_addr).green());
println!("Up: {}", style(convert(status.up)).green());
println!("Down: {}", style(convert(status.down)).green());

if !status.port_mapping_list.is_empty() {
println!("------------------------------------------");
println!("Port mapping {}", status.port_mapping_list.len());
for (is_tcp, addr, dest) in status.port_mapping_list {
if is_tcp {
println!(" TCP: {} -> {}", addr, dest)
} else {
println!(" UDP: {} -> {}", addr, dest)
}
}
}
if !status.in_ips.is_empty() || !status.out_ips.is_empty() {
println!("------------------------------------------");
}
if !status.in_ips.is_empty() {
println!("IP forwarding {}", status.in_ips.len());
for (dest, mask, ip) in status.in_ips {
println!(
" -- {} --> {}/{}",
ip,
Ipv4Addr::from(dest),
mask.count_ones()
)
}
}
if !status.out_ips.is_empty() {
println!("Allows network {}", status.out_ips.len());
for (dest, mask) in status.out_ips {
println!(" {}/{}", Ipv4Addr::from(dest), mask.count_ones())
}
}
}

fn convert(num: u64) -> String {
Expand Down
2 changes: 1 addition & 1 deletion vnt/src/channel/punch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ impl NatInfo {
if port != 0 {
if let Some(public_port) = self.public_ports.get_mut(index) {
if *public_port != port {
log::info!("端口变化={}:{}", ip, port)
log::info!("端口变化={}:{} index={}", ip, port, index)
}
*public_port = port;
}
Expand Down
7 changes: 6 additions & 1 deletion vnt/src/core/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ impl Config {
server_address_str: String,
mut name_servers: Vec<String>,
mut stun_server: Vec<String>,
in_ips: Vec<(u32, u32, Ipv4Addr)>,
mut in_ips: Vec<(u32, u32, Ipv4Addr)>,
out_ips: Vec<(u32, u32)>,
password: Option<String>,
mtu: Option<u32>,
Expand Down Expand Up @@ -103,6 +103,11 @@ impl Config {
address_choose(dns_query_all(&server_address_str, name_servers.clone())?)?;
#[cfg(feature = "port_mapping")]
let port_mapping_list = crate::port_mapping::convert(port_mapping_list)?;

for (dest, mask, _) in &mut in_ips {
*dest = *mask & *dest;
}
in_ips.sort_by(|(dest1, _, _), (dest2, _, _)| dest2.cmp(dest1));
Ok(Self {
#[cfg(target_os = "windows")]
tap,
Expand Down

0 comments on commit 9df324f

Please sign in to comment.