{"id":682,"date":"2026-10-18T16:22:16","date_gmt":"2026-10-18T19:22:16","guid":{"rendered":"https:\/\/carloslopes.programandosolucoes.com.br\/index.php\/2026\/10\/18\/suite-layer2-mikrotik-rust-raw-sockets\/"},"modified":"2026-10-18T16:22:16","modified_gmt":"2026-10-18T19:22:16","slug":"suite-layer2-mikrotik-rust-raw-sockets","status":"publish","type":"post","link":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/2026\/10\/18\/suite-layer2-mikrotik-rust-raw-sockets\/","title":{"rendered":"Su\u00edte Layer 2 MikroTik em Rust: Auditoria e Telemetria via Raw Sockets"},"content":{"rendered":"<p>Na arquitetura de telecomunica\u00e7\u00f5es e provedores de internet, o diagn\u00f3stico de falhas em enlaces frequentemente esbarra em limita\u00e7\u00f5es de ferramentas baseadas em SNMP ou ICMP. Quando um enlace degrada ou uma bridge entra em loop, a camada IP pode parar de responder antes que tenhamos telemetria precisa do incidente.<\/p>\n<h2>Por que Rust e Raw Sockets?<\/h2>\n<p>Para resolver esse gargalo, desenvolvi uma su\u00edte de auditoria em Rust que opera diretamente na camada de enlace (Layer 2) do modelo OSI. Utilizando <code>AF_PACKET<\/code> e <code>SOCK_RAW<\/code> no Linux, capturamos e processamos quadros Ethernet diretamente do driver de rede sem sobrecarga de aloca\u00e7\u00f5es din\u00e2micas na pilha de protocolos.<\/p>\n<pre><code class=\" language-rust\\>use socket2::{Domain, Protocol, Socket, Type};\nuse std::os::unix::io::AsRawFd;\n\nfn bind_layer2_socket(interface_name: &str) -> std::io::Result<Socket> {\n let socket = Socket::new(\n Domain::from(libc::AF_PACKET),\n Type::raw(),\n Some(Protocol::from(libc::ETH_P_ALL.to_be())),\n )?;\n println!(\\[+] Socket Layer 2 aberto com sucesso na interface: -encodedCommand  \\, interface_name);\n Ok(socket)\n}<\/code><\/pre>\n<h2>Decodifica\u00e7\u00e3o do Protocolo MNDP<\/h2>\n<p>O MikroTik Neighbor Discovery Protocol (MNDP) transmite periodicamente pacotes UDP em broadcast para a porta 5678, anunciando identidade do roteador, vers\u00e3o do RouterOS, endere\u00e7o MAC da interface f\u00edsica e tempo de atividade (uptime). Com a su\u00edte em Rust, a decodifica\u00e7\u00e3o ocorre em sub-microssegundos, permitindo mapear centenas de roteadores instantaneamente.<\/p>\n<h2>Conclus\u00e3o<\/h2>\n<p>O ecossistema Rust comprova sua superioridade para ferramentas de infraestrutura de telecomunica\u00e7\u00f5es: desempenho equivalente a C com seguran\u00e7a de mem\u00f3ria e aus\u00eancia de travamentos em tempo de execu\u00e7\u00e3o.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Na arquitetura de telecomunica\u00e7\u00f5es e provedores de internet, o diagn\u00f3stico de falhas em enlaces frequentemente esbarra em limita\u00e7\u00f5es de ferramentas baseadas em SNMP ou ICMP. Quando um enlace degrada ou uma bridge entra em loop, a camada IP pode parar de responder antes que tenhamos telemetria precisa do incidente. Por que Rust e Raw Sockets? [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[147,138,145,146,137],"class_list":["post-682","post","type-post","status-publish","format-standard","hentry","category-sem-categoria","tag-layer-2","tag-linux","tag-mikrotik","tag-networking","tag-rust"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"br","enabled_languages":["en","br","it"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"br":{"title":false,"content":false,"excerpt":false},"it":{"title":false,"content":false,"excerpt":false}}},"_links":{"self":[{"href":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/wp-json\/wp\/v2\/posts\/682","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/wp-json\/wp\/v2\/comments?post=682"}],"version-history":[{"count":0,"href":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/wp-json\/wp\/v2\/posts\/682\/revisions"}],"wp:attachment":[{"href":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/wp-json\/wp\/v2\/media?parent=682"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/wp-json\/wp\/v2\/categories?post=682"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/carloslopes.programandosolucoes.com.br\/br\/index.php\/wp-json\/wp\/v2\/tags?post=682"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}