2009-12-01 36 views
8

Làm thế nào tôi có thể nhìn thấy từ vỏ các tùy chọn socket nào được đặt? Cụ thể là Tôi muốn biết liệu SO_BROADCAST có được đặt không?Tùy chọn ổ cắm hiển thị

Trả lời

7

Bạn có thể sử dụng lsof(8). Nếu PID là quá trình ID và FD là số mô tả tập tin của ổ cắm bạn quan tâm, bạn có thể làm điều này:

lsof -a -p PID -d FD -T f 

Để liệt kê tất cả các socket IPv4 của một quá trình:

lsof -a -p PID -i 4 -T f 

Thao tác này sẽ in ra các tùy chọn ổ cắm với một số SO=, cùng với các thông tin khác. Lưu ý rằng nếu không có tùy chọn nào được đặt, bạn sẽ nhận được chuỗi trống, vì vậy bạn sẽ thấy một cái gì đó như SO=PQLEN=0 v.v. Để kiểm tra SO_BROADCAST, chỉ cần grep cho chuỗi SO_BROADCAST sau SO=, ví dụ:

if lsof -a -p PID -d FD -T f | grep -q 'SO=[^=]*SO_BROADCAST'; then 
    # socket has SO_BROADCAST 
else 
    # it doesn't 
fi 
+2

Trên hệ thống của tôi (RHEL 5.3) cờ "-T" của lsof có thể chấp nhận "q" và "s", nhưng không phải là "f". Có giải pháp nào khác không? – dimba

+0

Bạn cũng có thể thử 'fuser (1)' http://linux.die.net/man/1/fuser hoặc 'netstat (8)' http://linux.die.net/man/8/netstat, nhưng nếu lsof không hoạt động và chúng không hoạt động, bạn có thể không may mắn trên hệ thống của bạn. –

2

Trên Linux, bạn có thể sử dụng các mô-đun knetstat hạt nhân để kiểm tra tùy chọn ổ cắm, bao gồm SO_BROADCAST.

Các vấn đề liên quan