Forwarded from Generative Anton
Очень забавная история про ботнет Cereals, который ломал NAS и NVR D-Link.
Сейчас он уже почти прекратил своё существование, но интересна основная цель этого ботнета. Он не занимался DDOS'ом, кражей пользовательских данных или чем-то ещё. Он просто и методично скачивал аниме на dedicated-сервера.
— Какова моя цель, создатель? Украсть ключи от ядерного оружия? Взломать банковские счета или крипто-биржи?
— Нууууу, как тебе сказать...
Сейчас он уже почти прекратил своё существование, но интересна основная цель этого ботнета. Он не занимался DDOS'ом, кражей пользовательских данных или чем-то ещё. Он просто и методично скачивал аниме на dedicated-сервера.
— Какова моя цель, создатель? Украсть ключи от ядерного оружия? Взломать банковские счета или крипто-биржи?
— Нууууу, как тебе сказать...
Forcepoint
The Cereals Story - Creating a Botnet During Breakfast
We are proud to provide all the details what we’ve been asked for since presenting our research last December at Botconf 2019. If you own a D-Link NAS or NVR device, care about network security or just being interested in exotic IoT botnets; this one is for…
[sun]
_.-""""-._ /
.' `. [earth]
/ \ \___
| | _ / \
| | (_) | |
| | / \___/
\ / [moon]
`._ _.'
`-....-'
Прочитал все доступные на данный момент (1, 1A, 2) части статьи и вау. Вдохновляет сделать подобную дичь (если у вас есть идеи — пишите :P)
Forwarded from ☕️ Мерлин заваривает τσάι 🐌 (Мерль🛠)
blog.m-ou.se
Writing Python inside your Rust code — Part 1
About a year ago, I published a Rust crate called inline-python,
which allows you to easily mix some Python into your Rust code using a python!{ .. } macro.
In this series, I’ll go through the process of developing this crate from scratch.
which allows you to easily mix some Python into your Rust code using a python!{ .. } macro.
In this series, I’ll go through the process of developing this crate from scratch.
> Quite a few of my programming adventures start with “this sounds impossible, let’s do it!"
(C) Mara: Writing Python inside your Rust code — Part 1A
У меня тоже самое =)
(C) Mara: Writing Python inside your Rust code — Part 1A
У меня тоже самое =)
У каждого программиста на расте наступает такой момент, когда он открывает что-то вроде и очевидное, но неожиданное.
Среди такого можно отметить например
Много таких приятных штук в
Среди такого можно отметить например
.collect::<Result<Vec<_>, _>> или упомянутые в статье ниже Option::as_deref{,_mut} (ну и Result::as_deref{,_mut}{,_err})Много таких приятных штук в
std :)Forwarded from Блог*
#prog #rust
Хозяйке на заметку
Если вы когда-нибудь писали на Rust какую-нибудь рекурсивную структуру, то у вас там наверняка было поле вроде
Хозяйке на заметку
Если вы когда-нибудь писали на Rust какую-нибудь рекурсивную структуру, то у вас там наверняка было поле вроде
Option<Box<Self>> или Option<Rc<Self>>. Для обхода подобной структуры требуется получить ссылку из поля такого типа. В принципе, можно писать что-то вродеif let Some(relative) = &self.relative {
// здесь можно работать с relative как с &Self благодаря deref coercion
}
, но если по каким-то причинам требуется Option<&Self>, то это уже не сработает из-за несовпадения типов. Приведение типов в подобной ситуации выглядит как field.as_ref().map(<_>::deref), или того хуже, field.as_ref().map(|x| &**x). Как я недавно с некоторым удивлением для себя обнаружил, это достаточно распространённый паттерн, чтобы для него были отдельные методы: Option::as_deref и Option::as_deref_mut. Что они делают — очевидно по типам:fn as_deref(&self) -> Option<&<T as Deref>::Target>;Есть резон не использовать эти методы? Если у вас стоит задача поддерживать старые версии rustc, то да, есть: эти методы были добавлены в Rust 1.40.0 (видимо, по этой причине я раньше про них и не знал). Конечно, ничто не мешает написать extension trait для добавления этих методов, только имейте в виду: если одно и то же выражение может быть как вызовом собственного метода типа, так и вызовом метода трейта, то предпочтение всегда отдаётся собственному методу типа.
fn as_deref_mut(&mut self) -> Option<&mut <T as Deref>::Target>;
doc.rust-lang.org
Option in std::option - Rust
The `Option` type. See the module level documentation for more.
Хм, тут появилась идея сделать очень очень очень маленький крейтик, чтобы
1. накостылять решение проблемы с
2. сделать код более читаемым, именую непонятные типы
Упрощённо идея такая:
Что думаете?
1. накостылять решение проблемы с
PhantomData<fn(T) -> T> которую нельзя создать в const fn [^1]2. сделать код более читаемым, именую непонятные типы
Упрощённо идея такая:
type Invariant<T> = PhantomData<fn(T) -> T>;
type Covariant<T> = PhantomData<fn() -> T>;
type Contravariant<T> = PhantomData<fn(T) -> ()>;
(+ дока с объяснениями и хак для const fn)Что думаете?
GitHub
`PhantomData<fn()>` is unstable in `const fn` · Issue #69459 · rust-lang/rust
I tried this code: use core::marker::PhantomData; const fn test() { let _: PhantomData<fn()> = PhantomData; } (playground) I expected it to work, but it doesn't work. Error: e...
мне не нравится реальность
Хм, тут появилась идея сделать очень очень очень маленький крейтик, чтобы 1. накостылять решение проблемы с PhantomData<fn(T) -> T> которую нельзя создать в const fn [^1] 2. сделать код более читаемым, именую непонятные типы Упрощённо идея такая: type…
Собственно при написании
typed_phy мне чего-то такого не хватало, поэтому и задумался/// Replacement for `!` aka never that will never be stabilized.
pub enum Never {}Вот знаете, иногда смотрите на что-то (слово например), что видели много раз, и вдруг понимаете почему так...
Я только что понял что
Я только что понял что
lt и gt это less than и greater than (вафель 17 годиков)