ไคลเอนต์ P0F Python API
นี่คือไคลเอนต์ API ที่เรียบง่ายสำหรับ P0F3 ที่มีอยู่ที่ http://lcamtuf.coredump.cx/p0f3/ มันเข้ากันไม่ได้กับเวอร์ชัน 2.x หรือ 1.x เริ่มต้น P0F ด้วยตัวเลือก -s path/to/unix_socket
การใช้งานขั้นพื้นฐาน:
จาก P0F นำเข้า P0F, p0fexception
data = ไม่มี
p0f = p0f ("p0f.sock") # ชี้ไปที่ซ็อกเก็ตที่กำหนดด้วยอาร์กิวเมนต์ "-s"
พยายาม:
data = p0f.get_info ("192.168.0.1"))
ยกเว้น p0fexception, e:
# แบบสอบถามที่ไม่ถูกต้องถูกส่งไปยัง P0F บางที API อาจเปลี่ยนไป?
พิมพ์ E
ยกเว้น KeyError, E:
# ไม่มีข้อมูลสำหรับที่อยู่ IP นี้
พิมพ์ e
ยกเว้น ValueError, E:
# P0F ส่งคืนค่าคงที่ไม่ถูกต้อง บางที API อาจเปลี่ยนไป?
พิมพ์ E
หากข้อมูล:
พิมพ์ "เห็นครั้งแรก:", ข้อมูล ["First_seen"]
พิมพ์ "เห็นครั้งสุดท้าย:", ข้อมูล ["last_seen"]
การรวม Django
ดูตัวอย่าง/django_models.py สำหรับโมเดล Django ที่สมบูรณ์ของข้อมูลที่ส่งคืนโดย P0F
Django Middleware มีให้บริการใน p0f.django.middleware
หากต้องการใช้ให้เพิ่ม P0FSOCKET = "path/to/p0f_unix_socket" ลงในการตั้งค่าโครงการของคุณ py และ p0f.django.middleware.P0fMiddleware ถึง MIDDLEWARE_CLASSES
มิดเดิลแวร์เพิ่มแอตทริบิวต์ p0f ให้กับคำขอที่เข้ามาทั้งหมด request.p0f ไม่มีหากการเชื่อมต่อกับ P0F ล้มเหลวหรือ P0F ไม่ได้ส่งคืนข้อมูลสำหรับที่อยู่ IP ระยะไกล
เขตข้อมูล
บางส่วนของคำอธิบายเหล่านี้ถูกคัดลอกอย่างไร้ยางอายจาก http://lcamtuf.coredump.cx/p0f3/readme:
โดยค่าเริ่มต้นฟิลด์ต่อไปนี้จะถูกแยกวิเคราะห์:
- DateTime: First_seen
- DateTime: Last_seen
- TimeDelta: uptime
- int: uptime_sec
- timedelta: up_mod_days
- DateTime: last_nat
- DateTime: last_chg
นอกจากนี้ BAD_SW และ OS_MATCH_Q ได้รับการตรวจสอบแล้ว "ValueError" จะเพิ่มขึ้นหากพบค่าที่ไม่ถูกต้อง สำหรับฟิลด์ที่ว่างเปล่าทั้งหมดไม่มีการใช้แทนสตริงที่ว่างเปล่าหรือค่าคงที่:
- uptime_min
- uptime_sec
- เวลาทำงาน
- up_mod_days
- last_nat
- last_chg
- ระยะทาง
- bad_sw
- os_name
- os_flavor
- http_flavor
- link_type
- ภาษา
การแยกวิเคราะห์และการตรวจสอบนี้สามารถปิดใช้งานได้ด้วย
p0f.get_info ("192.168.0.1", จริง)
คำอธิบายทั้งหมดของฟิลด์:
- int: First_seen - เวลา UNIX (วินาที) ของการสังเกตครั้งแรกของโฮสต์
- int: last_seen - เวลา UNIX (วินาที) ของการรับส่งข้อมูลล่าสุด
- int: Total_conn - จำนวนการเชื่อมต่อทั้งหมดที่เห็น
- int: uptime_min - การคำนวณระบบการทำงานในเวลาไม่กี่นาที ศูนย์ถ้าไม่ทราบ
- int: UP_MOD_DAYS - ช่วงเวลาที่ใช้เวลาในช่วงเวลา
- int: last_nat - เวลาของการตรวจจับการแชร์ IP ล่าสุด (NAT, โหลดบาลานซ์, พร็อกซ์) ศูนย์หากไม่เคยตรวจพบ
- int: last_chg - เวลาของ OS ที่ไม่ตรงกันแต่ละตัวล่าสุด (เช่นเนื่องจากการใช้ Multiboot หรือ IP ซ้ำ)
- int: ระยะทาง - ระยะทางของระบบ (มาจาก TTL; -1 ถ้าไม่มีข้อมูล)
- int: bad_sw - p0f คิดว่าสตริงผู้ใช้หรือเซิร์ฟเวอร์ไม่ถูกต้อง ค่า 1 หมายถึงความแตกต่างของระบบปฏิบัติการ (อาจเป็นเพราะพร็อกซ์) ในขณะที่ 2 หมายถึงความไม่ตรงกันทันที หมายเหตุ: หากไม่มีตัวแทนผู้ใช้อยู่เลยค่านี้จะอยู่ที่ 0
- int: OS_MATCH_Q - OS Match คุณภาพ: 0 สำหรับการจับคู่ปกติ; 1 สำหรับฟัซซี่ (เช่น TTL หรือ DF ความแตกต่าง); 2 สำหรับลายเซ็นทั่วไป และ 3 สำหรับทั้งคู่
- String: os_name - ชื่อของระบบปฏิบัติการที่ตรงกันในเชิงบวกล่าสุด หากไม่ทราบระบบปฏิบัติการ OS_NAME เป็นสตริงที่ว่างเปล่า หมายเหตุ: หากโฮสต์ถูกมองเห็นครั้งแรกโดยใช้ระบบที่รู้จักแล้วสลับไปที่ระบบที่ไม่รู้จักฟิลด์นี้จะไม่ถูกรีเซ็ต
- สตริง: os_flavor - เวอร์ชัน OS อาจว่างเปล่าหากไม่มีข้อมูล
- สตริง: http_name - แอปพลิเคชัน HTTP ที่ระบุในเชิงบวกล่าสุด (เช่น 'firefox')
- สตริง: http_flavor - เวอร์ชันของแอปพลิเคชัน HTTP ถ้ามี
- สตริง: link_type - ประเภทลิงค์เครือข่ายหากรับรู้
- สตริง: ภาษา - ภาษาระบบหากได้รับการยอมรับ
ใบอนุญาต
ดู license.txt