Python-Scapy: كيفية ترجمة أرقام المنفذ إلى أسماء الخدمة؟
سؤال
تحتوي طبقة TCP في SCAIL على منفذ المصدر:
>>> a[TCP].sport
80
هل هناك طريقة بسيطة لتحويل رقم المنفذ إلى اسم الخدمة؟ لقد رأيت SCALAY TCP_SERVICES
و UDP_SERVICES
لترجمة رقم المنفذ، ولكن
print TCP_SERVICES[80] # fails
print TCP_SERVICES['80'] # fails
print TCP_SERVICES.__getitem__(80) # fails
print TCP_SERVICES['www'] # works, but it's not what i need
80
شخص يعرف كيف يمكنني تعيين منافذ الخدمات إلى الخدمات؟
شكرا لكم مقدما
المحلول
إذا كان هذا شيء تحتاج إلى القيام به في كثير من الأحيان، فيمكنك إنشاء تعيين عكسي من TCP_SERVICES
:
>>> TCP_REVERSE = dict((TCP_SERVICES[k], k) for k in TCP_SERVICES.keys())
>>> TCP_REVERSE[80]
'www'
نصائح أخرى
بيثون قابس كهرباء الوحدة سوف تفعل ذلك:
>>> import socket
>>> socket.getservbyport(80)
'http'
>>> socket.getservbyport(21)
'ftp'
>>> socket.getservbyport(53, 'udp')
'domain'
قد يعمل هذا من أجلك (تصفية القاموس بناء على القيمة):
>>> [k for k, v in TCP_SERVICES.iteritems() if v == 80][0]
'www'
إذا كنت تستخدم UNIX أو Linux، فهناك ملف / إلخ / خدمات تحتوي على هذا التعيين.
لقد وجدت حل جيد ملء DICTC.MYTCP_SERVICES
for p in scapy.data.TCP_SERVICES.keys():
self.MYTCP_SERVICES[scapy.data.TCP_SERVICES[p]] = p
لا تنتمي إلى StackOverflow