Python-Scapy: كيفية ترجمة أرقام المنفذ إلى أسماء الخدمة؟

StackOverflow https://stackoverflow.com/questions/976599

  •  13-09-2019
  •  | 
  •  

سؤال

تحتوي طبقة 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 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top