Làm thế nào để tôi nhận được các cổng mà quá trình đang lắng nghe khi sử dụng python? Các pid của quá trình này được biết đến.Làm thế nào để có được cổng mà một quá trình lắng nghe?
Trả lời
Bạn có thể sử dụng netstat -lnp
, cột cuối cùng sẽ chứa tên pid và quá trình. Trong Python bạn có thể phân tích đầu ra của lệnh này.
Nếu bạn không muốn phân tích đầu ra của một chương trình như netstat hoặc lsof, bạn có thể duyệt qua hệ thống tập tin/proc và tìm tài liệu trên các tệp bên trong. /proc/<pid>/net/tcp
có thể đặc biệt thú vị với bạn. Tất nhiên, định dạng của các tệp đó có thể thay đổi giữa các bản phát hành hạt nhân, do đó, đầu ra lệnh phân tích cú pháp thường được coi là đáng tin cậy hơn.
Có hai phần câu trả lời của tôi:
1. Lấy thông tin trong vỏ
Đối với phần đầu tiên, netstat
sẽ làm việc, nhưng tôi thích sử dụng lsof
, vì nó có thể được sử dụng để trích xuất một danh sách nhiều thông tin và súc tích hơn. Các tùy chọn chính xác để sử dụng có thể thay đổi dựa trên hệ điều hành, hạt nhân và biên dịch của bạn lựa chọn, nhưng tôi tin rằng bạn muốn một cái gì đó như thế này:
lsof -a -p23819 -i4
đâu 23819
là PID bạn đang chọn cho, và i4
biểu thị tất cả các ổ cắm IPv4 (mặc dù bạn có thể muốn i6
cho IPv6, như trường hợp có thể). Từ đó, bạn có thể đi qua grep để chỉ chọn các ổ cắm nghe.
lsof -a -p23819 -i4 | grep LISTEN
(Trong lsof
phiên bản 4,82, bạn có thể bổ sung sử dụng -sTCP:LISTEN
cờ thay vì grep
để chọn ổ cắm nghe, mặc dù tùy chọn này dường như không được cung cấp trở lại trong phiên bản 4,78)
2. gọi lsof
từ Python
Bạn sẽ có thể gọi lsof
và đọc kết quả, từ Python, sử dụng các mô-đun subprocess
, như vậy:
from subprocess import Popen, PIPE
p1 = Popen(['lsof', '-a', '-p23819', '-i4'], stdout=PIPE)
p2 = Popen(["grep", "LISTEN"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]
Hy vọng điều này sẽ hữu ích!
Bạn có thể sử dụng psutil:
>>> import psutil
>>> p = psutil.Process(2549)
>>> p.name()
'proftpd: (accepting connections)'
>>> p.connections()
[connection(fd=1, family=10, type=1, local_address=('::', 21), remote_address=(), status='LISTEN')]
... Để lọc cho ổ cắm nghe:
>>> [x for x in p.get_connections() if x.status == psutil.CONN_LISTEN]
[connection(fd=1, family=10, type=1, local_address=('::', 21), remote_address=(), status='LISTEN')]
>>>
Một điều mà không được đề cập. Hầu hết các ứng dụng cổng trong python đều lấy một đối số dòng lệnh. Bạn có thể phân tích cú pháp/proc/pid/cmdline và phân tích số cổng. Điều này tránh được chi phí lớn của việc sử dụng ss hoặc netstat trên các máy chủ với một tấn kết nối.
- 1. Làm thế nào để thay đổi HTTP cổng mà Play2 đang lắng nghe trên
- 2. Dịch vụ WCF có thể lắng nghe cùng một cổng như IIS như thế nào?
- 3. Hai quy trình lắng nghe cùng một cổng trong Windows 7 như thế nào?
- 4. Trình lắng nghe chrome.webRequest.onAuthRequired
- 5. PID nào lắng nghe trên cổng máy đã cho
- 6. TcpListener: Làm thế nào để lắng nghe trên cổng cụ thể trên tất cả các giao diện?
- 7. Trong C# làm thế nào tôi có thể nghe một cổng COM (Serial) đã được mở?
- 8. Tại sao DHCP client lắng nghe trên cổng 68?
- 9. Nhiều quy trình nghe trên cùng một cổng?
- 10. Làm thế nào để làm cho Fiddler lắng nghe tất cả các IP
- 11. Lắng nghe một chức năng được gọi là JavaScript
- 12. Làm thế nào để tìm ra cổng nào sử dụng một quá trình?
- 13. Làm thế nào để lắng nghe những thay đổi ưu tiên trong một PreferenceFragment?
- 14. Lắng nghe ACTION_SCREEN_OFF
- 15. Làm thế nào để tìm số cổng cho một id quá trình cụ thể trong unix?
- 16. Tại sao đang lắng nghe trên cổng với Netcat không làm việc
- 17. Xác định quá trình pid đang nghe trên một cổng nhất định
- 18. Trình lắng nghe đăng xuất SDK Android của Android
- 19. Node.js + Express: Ứng dụng sẽ không bắt đầu lắng nghe trên cổng 80
- 20. Làm thế nào để làm cho quá trình quét cổng TCP nhanh hơn?
- 21. Làm thế nào để bạn vượt qua một giá trị vào một người biết lắng nghe ajax primefaces
- 22. Làm thế nào tôi có thể nhận được một stdin của quá trình bằng một id quá trình?
- 23. Trình lắng nghe khởi tạo mô-đun EJB
- 24. Nhấp vào trình lắng nghe jQuery không hoạt động
- 25. Python: Nghe trên hai cổng
- 26. ExtJS Lưới - Click lắng nghe sự kiện
- 27. Làm thế nào để có được một kịch bản python để nghe đầu vào từ một kịch bản khác
- 28. Giết một quá trình và chờ quá trình thoát
- 29. Làm thế nào để giết một quá trình trong Cygwin?
- 30. Làm thế nào để bạn có được UserName của chủ sở hữu của một quá trình?
Cảm ơn. psutil là một mô-đun tốt. Nhưng vấn đề duy nhất là sử dụng mô-đun cần phải được cài đặt trước. Và cài đặt psutil cần gcc và các tiêu đề python được cài đặt. Vì vậy, dự án sử dụng psutil sẽ khó cài đặt. – mtoloo
psutil cần gcc vì nó chứa mã C cần được biên dịch. Tôi sẽ không đi xa như nói rằng đó là khó khăn để cài đặt, đặc biệt là trên Linux. Trên Ubuntu, ví dụ, bạn chỉ cần "apt-get install python-dev" và "pip install psutil" và bạn đã hoàn tất. –