{"id":1204,"date":"2026-05-15T11:07:04","date_gmt":"2026-05-15T14:07:04","guid":{"rendered":"https:\/\/bprot.com\/?page_id=1204"},"modified":"2026-05-15T19:40:19","modified_gmt":"2026-05-15T22:40:19","slug":"bpf","status":"publish","type":"page","link":"https:\/\/bprot.com\/en\/tips\/bpf\/","title":{"rendered":"bpf"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">1. El Lenguaje BPF (El \u00abFiltro VIP\u00bb)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<div class=\"wp-block-media-text is-stacked-on-mobile\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"443\" height=\"366\" src=\"https:\/\/bprot.com\/wp-content\/uploads\/2026\/05\/bpf-1.png\" alt=\"bpf 1\" class=\"wp-image-1207 size-full\" srcset=\"https:\/\/bprot.com\/wp-content\/uploads\/2026\/05\/bpf-1.png 443w, https:\/\/bprot.com\/wp-content\/uploads\/2026\/05\/bpf-1-300x248.png 300w, https:\/\/bprot.com\/wp-content\/uploads\/2026\/05\/bpf-1-15x12.png 15w\" sizes=\"auto, (max-width: 443px) 100vw, 443px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<p class=\"wp-block-paragraph\">El <strong>Berkeley Packet Filter<\/strong> es un lenguaje que vive en el n\u00facleo del sistema. Su trabajo es descartar el tr\u00e1fico irrelevante antes de que sature la CPU.<\/p>\n<\/div><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">La estructura de un filtro<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Un filtro se compone de <strong>identificadores<\/strong> acompa\u00f1ados de estos calificadores:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Type:<\/strong> \u00bfQu\u00e9 es el ID? (<code>host<\/code>, <code>net<\/code>, <code>port<\/code>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Dir:<\/strong> \u00bfHacia d\u00f3nde va? (<code>src<\/code>, <code>dst<\/code>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Proto:<\/strong> \u00bfQu\u00e9 protocolo usa? (<code>tcp<\/code>, <code>udp<\/code>, <code>ip<\/code>, <code>icmp<\/code>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejemplos de BPF:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>host 1.1.1.1<\/code> (Solo tr\u00e1fico de esa IP).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>src net 192.168.1.0\/24<\/code> (Solo tr\u00e1fico originado en esa red).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>port 443<\/code> (Solo tr\u00e1fico HTTPS).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>L\u00f3gica:<\/strong> <code>(host A or host B) and not port 22<\/code>.<\/p>\n\n\n\n<div class=\"wp-block-stackable-divider stk-block-divider stk-block stk-62ff250\" data-block-id=\"62ff250\"><hr class=\"stk-block-divider__hr\"\/><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">2. Las Flags (La \u00abC\u00e1mara y Lente\u00bb)<\/h2>\n\n\n\n<div class=\"wp-block-media-text is-stacked-on-mobile\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"449\" height=\"355\" src=\"https:\/\/bprot.com\/wp-content\/uploads\/2026\/05\/bpf-3.png\" alt=\"\" class=\"wp-image-1209 size-full\" srcset=\"https:\/\/bprot.com\/wp-content\/uploads\/2026\/05\/bpf-3.png 449w, https:\/\/bprot.com\/wp-content\/uploads\/2026\/05\/bpf-3-300x237.png 300w, https:\/\/bprot.com\/wp-content\/uploads\/2026\/05\/bpf-3-15x12.png 15w\" sizes=\"auto, (max-width: 449px) 100vw, 449px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<p class=\"wp-block-paragraph\">Mientras que BPF elige los paquetes, las <strong>flags<\/strong> modifican c\u00f3mo <code>tcpdump<\/code> captura y muestra esos datos.<\/p>\n<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>Flag<\/strong><\/td><td><strong>Nombre<\/strong><\/td><td><strong>\u00bfPara qu\u00e9 sirve?<\/strong><\/td><\/tr><\/thead><tbody><tr><td><code><strong>-i<\/strong><\/code><\/td><td>Interface<\/td><td>Elige la tarjeta de red (ej. <code>-i eth0<\/code> o <code>-i any<\/code>).<\/td><\/tr><tr><td><code><strong>-n<\/strong><\/code><\/td><td>No-resolve<\/td><td><strong>Fundamental.<\/strong> No traduce IPs a nombres. Es mucho m\u00e1s r\u00e1pido.<\/td><\/tr><tr><td><code><strong>-s 0<\/strong><\/code><\/td><td>Snaplen<\/td><td>Captura el paquete completo (sin recortes). Obligatorio para an\u00e1lisis profundo.<\/td><\/tr><tr><td><code><strong>-A<\/strong><\/code><\/td><td>ASCII<\/td><td>Muestra el contenido del paquete en texto legible. \u00datil para HTTP\/APIs.<\/td><\/tr><tr><td><code><strong>-X<\/strong><\/code><\/td><td>Hex\/ASCII<\/td><td>Muestra el contenido en Hexadecimal y Texto. Ideal para protocolos binarios.<\/td><\/tr><tr><td><code><strong>-v<\/strong><\/code><\/td><td>Verbose<\/td><td>Muestra detalles t\u00e9cnicos extra (TTL, Flags TCP, ID de IP).<\/td><\/tr><tr><td><code><strong>-w<\/strong><\/code><\/td><td>Write<\/td><td>Guarda la captura en un archivo <code>.pcap<\/code> para abrirlo en Wireshark.<\/td><\/tr><tr><td><code><strong>-r<\/strong><\/code><\/td><td>Read<\/td><td>Lee un archivo <code>.pcap<\/code> capturado previamente.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div class=\"wp-block-stackable-divider stk-block-divider stk-block stk-1nluivb\" data-block-id=\"1nluivb\"><hr class=\"stk-block-divider__hr\"\/><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">3. Combin\u00e1ndolo todo (Casos de uso Reales)<\/h2>\n\n\n\n<div class=\"wp-block-stackable-text stk-block-text stk-block stk-729131c\" data-block-id=\"729131c\"><p class=\"stk-block-text__text\">Aqu\u00ed es donde ocurre la magia. As\u00ed es como se ve un comando profesional en la terminal:<\/p><\/div>\n\n\n\n<div class=\"wp-block-media-text is-stacked-on-mobile\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"439\" height=\"254\" src=\"https:\/\/bprot.com\/wp-content\/uploads\/2026\/05\/bpf-4.png\" alt=\"\" class=\"wp-image-1210 size-full\" srcset=\"https:\/\/bprot.com\/wp-content\/uploads\/2026\/05\/bpf-4.png 439w, https:\/\/bprot.com\/wp-content\/uploads\/2026\/05\/bpf-4-300x174.png 300w, https:\/\/bprot.com\/wp-content\/uploads\/2026\/05\/bpf-4-18x10.png 18w\" sizes=\"auto, (max-width: 439px) 100vw, 439px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<p class=\"wp-block-paragraph\"><strong>A. Diagn\u00f3stico de tr\u00e1fico Web en tiempo real<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>tcpdump -ni eth0 -s 0 -A port 80<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Explicaci\u00f3n:<\/strong> \u00abEscucha en eth0 (<code>-i<\/code>), no resuelvas nombres (<code>-n<\/code>), captura el paquete entero (<code>-s 0<\/code>), mu\u00e9stramelo en texto plano (<code>-A<\/code>) y solo si es del puerto 80 (<code>port 80<\/code>)\u00bb.<\/p>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-stackable-divider stk-block-divider stk-block stk-6w1rl4g\" data-block-id=\"6w1rl4g\"><hr class=\"stk-block-divider__hr\"\/><\/div>\n\n\n\n<div class=\"wp-block-media-text is-stacked-on-mobile\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"502\" height=\"250\" src=\"https:\/\/bprot.com\/wp-content\/uploads\/2026\/05\/bpf-5.png\" alt=\"\" class=\"wp-image-1211 size-full\" srcset=\"https:\/\/bprot.com\/wp-content\/uploads\/2026\/05\/bpf-5.png 502w, https:\/\/bprot.com\/wp-content\/uploads\/2026\/05\/bpf-5-300x149.png 300w, https:\/\/bprot.com\/wp-content\/uploads\/2026\/05\/bpf-5-18x9.png 18w, https:\/\/bprot.com\/wp-content\/uploads\/2026\/05\/bpf-5-500x250.png 500w\" sizes=\"auto, (max-width: 502px) 100vw, 502px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<p class=\"wp-block-paragraph\"><strong>B. Captura silenciosa para analizar en Wireshark<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>tcpdump -ni any -s 0 -w captura_red.pcap host 10.0.0.50<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Explicaci\u00f3n:<\/strong> \u00abEscucha en todas las interfaces, no resuelvas nombres, captura todo el paquete y <strong>gu\u00e1rdalo en un archivo<\/strong> (<code>-w<\/code>) filtrando solo lo que toque a la IP 10.0.0.50&#8243;.<\/p>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-stackable-divider stk-block-divider stk-block stk-8lbct4j\" data-block-id=\"8lbct4j\"><hr class=\"stk-block-divider__hr\"\/><\/div>\n\n\n\n<div class=\"wp-block-media-text is-stacked-on-mobile\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"551\" height=\"266\" src=\"https:\/\/bprot.com\/wp-content\/uploads\/2026\/05\/bpf-6.png\" alt=\"\" class=\"wp-image-1212 size-full\" srcset=\"https:\/\/bprot.com\/wp-content\/uploads\/2026\/05\/bpf-6.png 551w, https:\/\/bprot.com\/wp-content\/uploads\/2026\/05\/bpf-6-300x145.png 300w, https:\/\/bprot.com\/wp-content\/uploads\/2026\/05\/bpf-6-18x9.png 18w\" sizes=\"auto, (max-width: 551px) 100vw, 551px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<p class=\"wp-block-paragraph\"><strong>C. \u00abCirug\u00eda\u00bb de red: Ver solo inicios de conexi\u00f3n (SYN)<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>tcpdump -nn 'tcp[tcpflags] &amp; (tcp-syn) != <\/code><code>0'<\/code><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00a0<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Explicaci\u00f3n:<\/strong> Usa BPF avanzado para mirar dentro del byte de las banderas TCP y mostrar solo los intentos de conexi\u00f3n nueva.<\/p>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-stackable-divider stk-block-divider stk-block stk-yfjzrfw\" data-block-id=\"yfjzrfw\"><hr class=\"stk-block-divider__hr\"\/><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Si el tr\u00e1fico es muy pesado, usa siempre <code>-n<\/code> y <code>-nn<\/code>. Si no lo haces, el motor \u00a0intentar\u00e1 preguntar al servidor DNS por cada IP que vea, generando m\u00e1s tr\u00e1fico de red y haciendo que la pantalla se congele o vaya con lag.<\/strong><\/p>\n\n\n\n<div class=\"wp-block-stackable-divider stk-block-divider stk-block stk-4h1wp2x\" data-block-id=\"4h1wp2x\"><hr class=\"stk-block-divider__hr\"\/><\/div>\n","protected":false},"excerpt":{"rendered":"<p>1. El Lenguaje BPF (El \u00abFiltro VIP\u00bb) El Berkeley Packet Filter es un lenguaje que vive en el n\u00facleo del sistema. Su trabajo es descartar el tr\u00e1fico irrelevante antes de que sature la CPU. La estructura de un filtro Un filtro se compone de identificadores acompa\u00f1ados de estos calificadores: Type: \u00bfQu\u00e9 es el ID? (host, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1214,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1204","page","type-page","status-publish","hentry"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/bprot.com\/en\/wp-json\/wp\/v2\/pages\/1204","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bprot.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bprot.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bprot.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bprot.com\/en\/wp-json\/wp\/v2\/comments?post=1204"}],"version-history":[{"count":2,"href":"https:\/\/bprot.com\/en\/wp-json\/wp\/v2\/pages\/1204\/revisions"}],"predecessor-version":[{"id":1213,"href":"https:\/\/bprot.com\/en\/wp-json\/wp\/v2\/pages\/1204\/revisions\/1213"}],"up":[{"embeddable":true,"href":"https:\/\/bprot.com\/en\/wp-json\/wp\/v2\/pages\/1214"}],"wp:attachment":[{"href":"https:\/\/bprot.com\/en\/wp-json\/wp\/v2\/media?parent=1204"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}