Что-нибудь лучше, чем использование lib c для произвольных протоколов через необработанные сокеты? - PullRequest
1 голос
/ 21 апреля 2020

Ящик nix является хорошей оболочкой для lib c для работы с необработанными сокетами, но оказывается, что он поддерживает протоколы TCP и UDP только для этих необработанных сокетов . Я хочу использовать, скажем, ICMP поверх необработанных сокетов - например, я хочу использовать sendto с пакетом ICMP, чтобы он был завернут в заголовок IP + заголовок Ethe rnet, прежде чем отправиться в сеть, так же, как это было бы со стандартными функциями lib c. Есть ли какие-нибудь обертки / ящики, которые поддерживают это, и я не прибегаю к самому уродливому FFI? Было бы замечательно, если бы был способ использовать getprotobyname или что-то подобное с nix.

1 Ответ

0 голосов
/ 22 апреля 2020

Стандартная библиотека Rust в настоящее время не имеет возможностей необработанных сокетов. Сетевая библиотека самого низкого уровня из существующих является прямой FFI для libpcap. Если вы хотите использовать какой-либо протокол, кроме TCP или UDP, через стандартную библиотеку, вам придется реализовать его самостоятельно или посмотреть, если pnet уже это сделал.

Использование pcap :

let mut handle = Device::lookup().unwrap().open().unwrap();

let data = &[0, 1, 2, 3, 5];

handle.sendpacket(data);
...