
Python ctypes रैपर Event Tracing for Windows (ETW) के लिए, जो सुरक्षा निगरानी और फोरेंसिक विश्लेषण हेतु सत्र नियंत्रण, इवेंट कैप्चर और कस्टम कॉलबैक सक्षम करता है।
ETW एक ट्रेसिंग सुविधा है जो उपयोगकर्ता को फ़ाइल या बफ़र में इवेंट लॉग करने की अनुमति देती है। ETW का अवलोकन यहाँ पाया जा सकता है। मूल आर्किटेक्चर में एक Provider, Controller, और Consumer शामिल होते हैं। Controller एक कैप्चर सत्र को परिभाषित और नियंत्रित करता है। इसमें यह शामिल होता है कि सत्र में कौन से providers हैं, साथ ही सत्र को शुरू और बंद करना भी। Provider, जिसे GUID (Globally Unique Identifier) का उपयोग करके निर्दिष्ट किया जाता है, इवेंट को बफ़र की एक श्रृंखला में लॉग करता है। Consumer संदेशों को बफ़र या फ़ाइल से प्राप्त करता है और उन्हें कालानुक्रमिक क्रम में संसाधित करता है।
यह मॉड्यूल ETW सत्रों को नियंत्रित करने और संदेश डेटा को संसाधित करने के लिए आवश्यक Win32 APIs के चारों ओर एक पूरी तरह से Python-आधारित ctypes रैपर है। यह मॉड्यूल बहुत लचीला है और कैप्चर से पहले या बाद के फ़िल्टर सेट कर सकता है।
इस मॉड्यूल का उपयोग करने के लिए etw आयात करें और उन provider(s) के लिए ProviderInfo इंस्टेंस की एक सूची पास करके ETW क्लास का एक इंस्टेंस बनाएं जिनसे आप डेटा कैप्चर करना चाहते हैं। ETW से लौटाए गए डेटा को संसाधित करने के लिए आपको एक कॉलबैक निर्दिष्ट करना होगा।
import etw
def some_func():
# define capture provider info
providers = [etw.ProviderInfo('Some Provider', etw.GUID("{11111111-1111-1111-1111-111111111111}"))]
# create instance of ETW and start capture
with etw.ETW(providers=providers, event_callback=etw.on_event_callback):
# run capture
etw.run('etw')
नीचे कस्टम कॉलबैक का उपयोग करके कैप्चर करने के लिए मॉड्यूल का उपयोग करने का एक उदाहरण है।
import time
import etw
def some_func():
# define capture provider info
providers = [etw.ProviderInfo('Some Provider', etw.GUID("{11111111-1111-1111-1111-111111111111}"))]
# create instance of ETW class
job = etw.ETW(providers=providers, event_callback=lambda x: print(x))
# start capture
job.start()
# wait some time
time.sleep(5)
# stop capture
job.stop()
सबक्लासिंग ETW कैप्चर क्लास को परिभाषित करने का एक और सुविधाजनक तरीका है।
import time
import etw
class MyETW(etw.ETW):
def __init__(self, event_callback):
# define capture provider info
providers = [etw.ProviderInfo('Some Provider', etw.GUID("{11111111-1111-1111-1111-111111111111}"))]
super().__init__(providers=providers, event_callback=event_callback)
def start(self):
# do pre-capture setup
self.do_capture_setup()
super().start()
def stop(self):
super().stop()
# do post-capture teardown
self.do_capture_teardown()
def do_capture_setup(self):
# do whatever setup for capture here
pass
def do_capture_teardown(self):
# do whatever for capture teardown here
pass
def my_capture():
# instantiate class
capture = MyETW(lambda x: print(x))
# start capture
capture.start()
# wait some time to capture data
time.sleep(5)
# stop capture
capture.stop()
अधिक उदाहरणों के लिए examples देखें।