是否有到原始套接字的安全接口?

月球漫步者

据说这里唯一的方法是使用libc:

extern crate libc;
extern crate native;
use libc::{c_int, c_void, socket, AF_INET, sockaddr_storage};
use native::io::net::sockaddr_to_addr;
use std::io::net::ip::SocketAddr;
static SOCK_RAW: c_int = 3;
static IPPROTO_ICMP: c_int = 1;

fn recvfrom<'buf>(sock: c_int, buf: &'buf mut [u8]) -> (&'buf mut [u8], SocketAddr) {
  let mut storage: sockaddr_storage = unsafe { std::mem::init() };
  let storagep = &mut storage as *mut _ as *mut libc::sockaddr;
  let mut addrlen = std::mem::size_of::<libc::sockaddr_storage>() as libc::socklen_t;

  let bytes = unsafe { libc::recvfrom(sock,
                 buf.as_mut_ptr() as *mut c_void,
                 buf.len() as u64, 
                 0, storagep, &mut addrlen) };

  (buf.mut_slice_to(bytes as uint),
   sockaddr_to_addr(&storage, addrlen as uint).unwrap())
}

fn main() {
  let handle = unsafe { socket(AF_INET, SOCK_RAW, IPPROTO_ICMP) };
  println!("{}", handle);
  let mut bufferator = [0, ..2048];
  loop {
    let (buf, from) = recvfrom(handle, bufferator.as_mut_slice());
    println!("from {}, data:\n{}", from, buf);
  }
}

但这是一年前写的,所以事情可能会改变吗?

Shepmaster

通常,不能存在与任意C代码的安全接口,因为不能保证C代码不会执行Rust不允许的操作。尽管只是约定俗成,Rust土地上的许多名称中用“ raw”表示的语义都不安全。

您可以做的是用Rust代码包装原始C代码,以确保C代码永远不会进入破坏程序安全性的状态。这就是喜欢TcpStreamUdpSocket构造物品的方式。据我所知,没有用于ICMP套接字的包装器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

绑定到网络接口后,无法通过python中的套接字发送任何原始数据

来自分类Dev

通过套接字发送和接收原始结构是否不安全?

来自分类Dev

带有原始套接字的python套接字setsockopt

来自分类Dev

当接口1上有:: 1时,为什么可以将此套接字绑定到:: 1%2?

来自分类Dev

当接口1上有:: 1时,为什么可以将此套接字绑定到:: 1%2?

来自分类Dev

将AF_PACKET套接字绑定到所有接口

来自分类Dev

防止内核处理绑定到原始套接字的TCP段

来自分类Dev

如何确定C ++中Linux套接字绑定到的接口

来自分类Dev

游戏过程未将UDP套接字绑定到VPN接口

来自分类Dev

是否可以从套接字到带有“零复制”的缓冲区中的splice()?

来自分类Dev

检查是否有传入的套接字

来自分类Dev

为什么当程序在正确的端口上侦听,套接字绑定到所有接口时为何“ [Errno 61] Connection拒绝”?

来自分类Dev

具有多个接口的Python UDP套接字

来自分类Dev

原始套接字多播

来自分类Dev

Linux:将UDP侦听套接字绑定到特定接口(或找出数据报来自的接口)?

来自分类Dev

带有unix域套接字的IPC安全吗?

来自分类Dev

套接字是否集成到C ++标准中?

来自分类Dev

安全UDP套接字编程

来自分类Dev

套接字接收数据时,Java套接字中是否有事件?

来自分类Dev

如何避免将多个原始套接字绑定到相同的IP地址?

来自分类Dev

读取原始套接字是否可以一次返回多个数据包?

来自分类Dev

是否有基于TPL(异步/等待)的套接字抽象?

来自分类Dev

我如何检查套接字中是否有可用的东西?

来自分类Dev

检查是否有任何套接字连接正在等待(python)

来自分类Dev

在C ++中关闭套接字是否有任何限制?

来自分类Dev

如何检查异步循环是否有任何关联的套接字

来自分类Dev

当套接字绑定到设备时,macvlan接口之间的通信问题

来自分类Dev

Python:在OSX中使用原始套接字

来自分类Dev

原始套接字未收到icmp响应

Related 相关文章

  1. 1

    绑定到网络接口后,无法通过python中的套接字发送任何原始数据

  2. 2

    通过套接字发送和接收原始结构是否不安全?

  3. 3

    带有原始套接字的python套接字setsockopt

  4. 4

    当接口1上有:: 1时,为什么可以将此套接字绑定到:: 1%2?

  5. 5

    当接口1上有:: 1时,为什么可以将此套接字绑定到:: 1%2?

  6. 6

    将AF_PACKET套接字绑定到所有接口

  7. 7

    防止内核处理绑定到原始套接字的TCP段

  8. 8

    如何确定C ++中Linux套接字绑定到的接口

  9. 9

    游戏过程未将UDP套接字绑定到VPN接口

  10. 10

    是否可以从套接字到带有“零复制”的缓冲区中的splice()?

  11. 11

    检查是否有传入的套接字

  12. 12

    为什么当程序在正确的端口上侦听,套接字绑定到所有接口时为何“ [Errno 61] Connection拒绝”?

  13. 13

    具有多个接口的Python UDP套接字

  14. 14

    原始套接字多播

  15. 15

    Linux:将UDP侦听套接字绑定到特定接口(或找出数据报来自的接口)?

  16. 16

    带有unix域套接字的IPC安全吗?

  17. 17

    套接字是否集成到C ++标准中?

  18. 18

    安全UDP套接字编程

  19. 19

    套接字接收数据时,Java套接字中是否有事件?

  20. 20

    如何避免将多个原始套接字绑定到相同的IP地址?

  21. 21

    读取原始套接字是否可以一次返回多个数据包?

  22. 22

    是否有基于TPL(异步/等待)的套接字抽象?

  23. 23

    我如何检查套接字中是否有可用的东西?

  24. 24

    检查是否有任何套接字连接正在等待(python)

  25. 25

    在C ++中关闭套接字是否有任何限制?

  26. 26

    如何检查异步循环是否有任何关联的套接字

  27. 27

    当套接字绑定到设备时,macvlan接口之间的通信问题

  28. 28

    Python:在OSX中使用原始套接字

  29. 29

    原始套接字未收到icmp响应

热门标签

归档