
BPF फ़िल्टर हल करने और इनके आधार पर पैकेट बनाने के लिए उपकरण
बर्कले पैकेट फ़िल्टर (BPF) बाइटकोड के रिवर्स-इंजीनियरिंग के लिए पायथन टूलकिट। दिए गए कच्चे BPF निर्देशों — जैसे कि आप किसी मैलवेयर सैंपल, पैकेट कैप्चर फ़िल्टर, या नेटवर्क एप्लायंस से निकाल सकते हैं — filterforge उन्हें मानव-पठनीय रूप में डिस्सेम्बल करता है, एक स्वीकार्य पथ को संतुष्ट करने वाले पैकेट बाधाओं के सेट को हल करने के लिए Z3 का उपयोग करता है, और फिर एक ठोस नेटवर्क पैकेट बनाने के लिए Scapy का लाभ उठाता है जो फ़िल्टर को पास करेगा।
संक्षेप में: इसे एक BPF प्रोग्राम दें और यह आपको एक पूर्ण रूप से गठित पैकेट (ईथरनेट, IPv4/IPv6, TCP/UDP/SCTP और उससे आगे) वापस देगा जिसे फ़िल्टर स्वीकार करता है — निरीक्षण करने, PCAP में सहेजने, या वायर पर भेजने के लिए तैयार।
इस टूल को चलाने के लिए uv स्थापित करने की अनुशंसा की जाती है।
कृपया टूल के उपयोग के लिए नीचे दिए गए उदाहरण देखें, समय के साथ और अधिक सुविधाएँ जोड़े जाने की संभावना है।
किसी दिए गए BPF के लिए जल्दी से परिणाम प्राप्त करने के लिए कमांड-लाइन का उपयोग करना सबसे आसान है। कुछ रिवर्स इंजीनियरिंग टूल डेटा को कॉपी करके कैसे वापस दे रहे हैं, इसके कारण आप या तो एक कच्चा हेक्स-स्ट्रिंग दे सकते हैं, या हेक्स मानों की एक सरणी दे सकते हैं, दिए गए BPF का डिस्सेम्बली दिखाने के लिए -d फ़्लैग का उपयोग करके;
# hex-string
uv run ff -d -b "280000000c00000015002900060800001500000bdd860000300000001400000015000027110000002800000038000000150024003500000015002300e91400001500220043000000150021009c690000150020006c07000015001f0089000000280000003600000015001d0fe91400001500001d0008000030000000170000001500000f11000000280000001400000045001900ff1f0000b10000000e0000004800000010000000150015003500000015001400e91400001500130043000000150012009c690000150011006c0700001500100089000000480000000e00000015000e00e914000015000d009c69000015000c006c07000015000b0c890000001500000b06000000280000001400000045000900ff1f0000b10000000e000000500000001a000000740000000400000024000000040000000c000000000000000700000000000000400000000e000000150000012054454706000000000004000600000000000000"
# array of hex values
uv run ff -d -b "[0x28,0x0,0x0,0xc,0x15,0x0,0x1b,0x800,0x30,0x0,0x0,0x17,0x15,0x0,0x5,0x11,0x28,0x0,0x0,0x14,0x45,0x17,0x0,0x1fff,0xb1,0x0,0x0,0xe,0x48,0x0,0x0,0x16,0x15,0x13,0x14,0x7255,0x15,0x0,0x7,0x1,0x28,0x0,0x0,0x14,0x45,0x11,0x0,0x1fff,0xb1,0x0,0x0,0xe,0x48,0x0,0x0,0x16,0x15,0x0,0xe,0x7255,0x50,0x0,0x0,0xe,0x15,0xb,0xc,0x8,0x15,0x0,0xb,0x6,0x28,0x0,0x0,0x14,0x45,0x9,0x0,0x1fff,0xb1,0x0,0x0,0xe,0x50,0x0,0x0,0x1a,0x54,0x0,0x0,0xf0,0x74,0x0,0x0,0x2,0xc,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x48,0x0,0x0,0xe,0x15,0x0,0x1,0x5293,0x6,0x0,0x0,0xffff,0x6,0x0,0x0,0x0]"
यह देखने के लिए कि दिए गए BPF बाइटकोड से नेटवर्क पैकेट कैसा दिखेगा, आप -c फ़्लैग का उपयोग कर सकते हैं:
uv run ff -c -b "280000000c0000001500000fdd8600003000000014000000150002008400000015000100060000001500002611000000280000003600000015002300fad5000015002200f6e500001500210012e90000150020005fd6000015001f0083e2000015001e0042fb000015001d006db2000015001c00fbf60000280000003800000015001a13fad500001500001a000800003000000017000000150002008400000015000100060000001500001611000000280000001400000045001400ff1f0000b10000000e000000480000000e00000015001000fad5000015000f00f6e5000015000e0012e9000015000d005fd6000015000c0083e2000015000b0042fb000015000a006db2000015000900fbf60000480000001000000015000700fad5000015000600f6e500001500050012e90000150004005fd600001500030083e200001500020042fb0000150001006db2000015000001fbf6000006000000ffff00000600000000000000"
2026-02-09 12:06:23,342 - INFO - Loaded 45 instructions
2026-02-09 12:06:23,342 - DEBUG - Found 50 accepting path(s)
2026-02-09 12:06:23,346 - DEBUG - Path 1 is satisfiable
2026-02-09 12:06:23,347 - INFO - Hexdump:
0000 00 00 00 00 00 00 00 00 00 00 00 00 86 DD 60 00 ..............`.
0010 00 00 00 00 84 00 00 00 00 00 00 00 00 00 00 00 ................
0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0030 00 00 00 00 00 00 D5 FA 00 00 00 00 00 00 00 00 ................
0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2026-02-09 12:06:23,347 - INFO - Packet summary:
###[ Ethernet ]###
dst = 00:00:00:00:00:00
src = 00:00:00:00:00:00
type = IPv6
###[ IPv6 ]###
version = 6
tc = 0
fl = 0
plen = 0
nh = SCTP
hlim = 0
src = ::
dst = ::
###[ SCTP ]###
sport = 54778
dport = 0
tag = 0x0
chksum = 0x0
###[ Raw ]###
load = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
कुछ BPF कच्ची IP लेयर का उपयोग कर रहे हो सकते हैं, आप इस उद्देश्य के लिए लिंक-टाइप -l raw निर्दिष्ट कर सकते हैं (डिफ़ॉल्ट ethernet है);