Last active
November 23, 2022 23:27
-
-
Save mnogu/3d6d762a646a045a7ed960a96b21517d to your computer and use it in GitHub Desktop.
Assign 192.0.2.1 to tap0 on Ubuntu 22.04.1 LTS with Rust (mkdir src && mv main.rs src && sudo cargo run)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[package] | |
name = "pareiodon" | |
version = "0.1.0" | |
edition = "2021" | |
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html | |
[dependencies] | |
nix = "0.25.0" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use std::{mem, os::raw::c_char}; | |
use nix::{ | |
ioctl_write_ptr_bad, libc, | |
sys::socket::{socket, AddressFamily, SockFlag, SockType, SockaddrIn}, | |
}; | |
ioctl_write_ptr_bad!(siocsifaddr, libc::SIOCSIFADDR, libc::ifreq); | |
fn main() { | |
let sock = socket( | |
AddressFamily::Inet, | |
SockType::Datagram, | |
SockFlag::empty(), | |
None, | |
) | |
.unwrap(); | |
let mut ifr_name: [c_char; libc::IF_NAMESIZE] = [0; libc::IF_NAMESIZE]; | |
let name = b"tap0\0"; | |
ifr_name[..name.len()].copy_from_slice(&name.map(|c| c as i8)[..]); | |
let ifru_addr = unsafe { mem::transmute(SockaddrIn::new(192, 0, 2, 1, 0).as_ref().clone()) }; | |
let ifr_ifru = libc::__c_anonymous_ifr_ifru { ifru_addr }; | |
let ifreq = libc::ifreq { ifr_name, ifr_ifru }; | |
unsafe { siocsifaddr(sock, &ifreq) }.unwrap(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment