Hiển thị các kết nối mạng của một quá trình


25

Có cách nào để hiển thị các kết nối của một quá trình? Một cái gì đó như thế:

show PID

trong đó showlà một lệnh để làm điều này, và PIDlà mấu chốt của quá trình. Đầu ra mà tôi muốn được tạo bởi tất cả các kết nối của quá trình (trong thời gian thực). Ví dụ: nếu quá trình cố gắng kết nối với 173.194.112.151 thì đầu ra là 173.194.112.151.

Một ví dụ cụ thể hơn với Firefox:

show `pidof firefox`

và với firefox tôi truy cập đầu tiên trên google.com , sau đó trên unix.stackexchange.com và cuối cùng là 192.30.252.129 . Đầu ra, khi tôi đóng trình duyệt, phải là:

google.com
stackexchange.com
192.30.252.129

(Rõ ràng với trình duyệt, kết quả đầu ra này không thực tế, vì có rất nhiều kết nối liên quan khác, nhưng đây chỉ là một ví dụ.)


Theo biến thể Unix nào? Hầu hết có công cụ để làm điều này, nhưng những người khác nhau.
Gilles 'SO- ngừng trở nên xấu xa'

Vì vậy, về cơ bản bạn muốn một bản ghi của tất cả các kết nối?
Sergiy Kolodyazhnyy

Tôi nghĩ rằng tcpdump hoặc Wireshark nên thực hiện công việc sau đó.
Sergiy Kolodyazhnyy

Một số cách có thể để thực hiện việc này: askubfox.com/questions/11709/ trên
Mark Plotnick

@Gilles Ubuntu 14.04.3 LTS
ᴜs

Câu trả lời:


23

Bạn đang tìm kiếm strace! Tôi đã tìm thấy câu trả lời này trên Askubfox , nhưng nó hợp lệ với Unix:

Để bắt đầu và theo dõi một quy trình mới:

strace -f -e trace=network -s 10000 PROCESS ARGUMENTS

Để theo dõi một quy trình hiện có với một PID đã biết:

strace -p $PID -f -e trace=network -s 10000

Mặt khác, nhưng đó là đặc thù của Linux, bạn có thể chạy quy trình trong một không gian tên mạng bị cô lập và sử dụng dây dẫn để theo dõi lưu lượng . Điều này có thể sẽ thuận tiện hơn so với việc đọc stracenhật ký:

  • tạo một không gian tên mạng thử nghiệm:

    ip netns add test
    
  • tạo một cặp giao diện mạng ảo (veth-a và veth-b):

    ip link add veth-a type veth peer name veth-b
    
  • thay đổi không gian tên hoạt động của giao diện veth-a:

    ip link set veth-a netns test
    
  • cấu hình địa chỉ IP của các giao diện ảo:

    ip netns exec test ifconfig veth-a up 192.168.163.1 netmask 255.255.255.0
    ifconfig veth-b up 192.168.163.254 netmask 255.255.255.0
    
  • cấu hình định tuyến trong không gian tên thử nghiệm:

    ip netns exec test route add default gw 192.168.163.254 dev veth-a
    
  • kích hoạt ip_forward và thiết lập quy tắc NAT để chuyển tiếp lưu lượng truy cập đến từ không gian tên bạn đã tạo (bạn phải điều chỉnh giao diện mạng và địa chỉ IP SNAT):

    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -s 192.168.163.0/24 -o YOURNETWORKINTERFACE -j SNAT --to-source YOURIPADDRESS
    

    (Bạn cũng có thể sử dụng quy tắc MASQUERADE nếu bạn thích)

  • cuối cùng, bạn có thể chạy quy trình bạn muốn phân tích trong không gian tên mới và wireshark cũng vậy:

    ip netns exec test thebinarytotest
    ip netns exec test wireshark
    

    Bạn sẽ phải theo dõi giao diện veth-a.


2
stracethực sự đặc trưng cho nhân Linux, vì vậy nó không hợp lệ cho tất cả các hệ điều hành giống Unix. Theo tôi hiểu, các hệ thống giống như BSD có các tiện ích tương tự (DTrace và giàn). Nhưng dù sao, câu trả lời tốt (nên nâng cao). Chào mừng bạn đến với Stack Exchange.
Anthony G - công lý cho Monica

Câu trả lời dường như chỉ đúng hướng, tuy nhiên tôi đang gặp vấn đề trong việcstrace diễn giải đầu ra trong khi kiểm tra git fetch. Tôi đã mong đợi để xem một số loại URL được bao gồm trong đầu ra, cũng như yêu cầu của OP. Ai đó có thể giúp gì không?
andreee

14

Thử

lsof -i -a -p `pidof firefox`

Nó hoạt động một phần: nó in một số kết nối hiện tại của quá trình, nhưng sau đó nó tự động đóng lại. Đối với một số chương trình, đầu ra chỉ là cảnh báo này:lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /home/user/.gvfs Output information may be incomplete.
s

Bạn có thể thêm tùy chọn -r1để lặp lại đầu ra mỗi giây và -wđể chặn các cảnh báo.
alxrem

2
Điều này chỉ hiển thị các kết nối tại một thời điểm, nó không liệt kê tất cả các kết nối mà một quá trình thực hiện trong suốt vòng đời của nó. Ngay cả khi bạn đặt lệnh này trong một vòng lặp, nó sẽ bỏ lỡ các kết nối ngắn.
Gilles 'SO- ngừng trở nên xấu xa'

Người hỏi không yêu cầu xem các kết nối trong suốt cuộc đời. Người ta có thể giải thích (in real-time)như from the point in time of tracking and forward.
llua

8

Đây là một cách tiếp cận khác:

ss -nap | grep $(pidof firefox)

Đầu ra mẫu:

tcp    ESTAB      0      0          192.168.0.222:49050    216.58.218.164:443    users:(("firefox",3280,69))
tcp    ESTAB      0      0          192.168.0.222:48630    198.252.206.25:443    users:(("firefox",3280,106))
tcp    ESTAB      0      0          192.168.0.222:44220     216.58.217.38:443    users:(("firefox",3280,140))
tcp    ESTAB      0      0          192.168.0.222:52690    54.240.170.181:80     users:(("firefox",3280,107))
tcp    ESTAB      0      0          192.168.0.222:48744    198.252.206.25:443    users:(("firefox",3280,87))
tcp    ESTAB      0      0          192.168.0.222:48811    198.252.206.25:443    users:(("firefox",3280,73))

1
Điều này chỉ hiển thị các kết nối tại một thời điểm, nó không liệt kê tất cả các kết nối mà một quá trình thực hiện trong suốt vòng đời của nó. Ngay cả khi bạn đặt lệnh này trong một vòng lặp, nó sẽ bỏ lỡ các kết nối ngắn.
Gilles 'SO- ngừng trở nên xấu xa'

5

Bạn cũng có thể thử với netstat -p. Từ trang người đàn ông:

netstat - In kết nối mạng, bảng định tuyến, thống kê giao diện, kết nối giả trang và thành viên multicast

Để chỉ hiển thị kết nối mạng sử dụng netstat -tup. Lưu ý rằng để xem quy trình PID, bạn có thể cần phải root.

Nếu bạn không có netstattrên hệ thống của mình, bạn có thể có sscú pháp gần như chính xác. Bạn có thể sử dụng sau đó ss -tup(như root).


1
Điều này chỉ hiển thị các kết nối tại một thời điểm, nó không liệt kê tất cả các kết nối mà một quá trình thực hiện trong suốt vòng đời của nó. Ngay cả khi bạn đặt lệnh này trong một vòng lặp, nó sẽ bỏ lỡ các kết nối ngắn.
Gilles 'SO- ngừng trở nên xấu xa'

1
netstat -p | grep firefox | grep tcp
Philip Kirkbride

@Gilles Điều đó có nghĩa là nó là một câu trả lời tuyệt vời cho bất cứ ai muốn xem các kết nối tại một thời điểm. Như trường hợp của tôi gần đây.
Jose Antonio phục hồi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.