Làm cách nào để kiểm tra có bao nhiêu kết nối đang mở trên một cổng TCP cụ thể?


8

Tôi đang thực hiện một số điểm chuẩn sao chổi và muốn xem tôi có bao nhiêu kết nối mở.

Thật ra tôi dùng netstat:

netstat -ant | grep 8080 | grep EST | wc -l

Nhưng nó cần khoảng 4 - 6 phút để liệt kê con số, có công cụ nào có thể hiển thị nó trong thời gian thực không? Số lượng kết nối mở là từ 100'000 - 250'000.


Dựa trên những gì bạn đang cố gắng thực hiện, bạn đã cân nhắc sử dụng NetFlow và một công cụ phân tích chưa?
SpacemanSpiff

@SpacemanSpiff Tôi hy vọng có một giải pháp dễ dàng, nhưng tôi sẽ xem trên NetFlow vì tôi không chắc liệu có hoạt động với công tắc HP hay không.
Nenad

Bạn biết đấy, tôi tự hỏi liệu một truy vấn perfmon hoặc WMI có thể đưa dữ liệu này trở lại từ ngăn xếp TCP nhanh hơn không ... vẫn là ... sau khi các cổng mở hoặc chuyển dữ liệu hoạt động?
SpacemanSpiff

@SpacemanSpiff Tôi đang tìm kiếm các cổng mở
Nenad

Có lẽ một truy vấn SNMP? ... chỉ cần đưa ra ý tưởng cho bạn.
SpacemanSpiff

Câu trả lời:


8

Không biết lsofcó tốt hơn không, nhưng hãy thử xem:

lsof -ni:8080 -sTCP:ESTABLISHED | wc -l

Trên thực tế, tôi mất 5 giây, nhưng tôi có 20'000 kết nối và đếm :-) sẽ cho bạn biết bao lâu sau khi vượt qua 100K
Nenad

cập nhật: có một số vấn đề với máy khách sao chổi của chúng tôi, nhưng lsof nhanh hơn 10 giây cho 30.000 kết nối, sẽ cập nhật sau khi tôi khắc phục sự cố sao chổi và có thể kiểm tra các kết nối trên 100K
Nenad

cập nhật: 15 giây để hiển thị 130.000 kết nối - cảm ơn bạn! Điều này làm công việc cho tôi để có giải pháp chi tiết hơn phải sử dụng máy phân tích mạng.
Nenad

tuyệt vời Bạn cũng có thể sử dụng công tắc -t- có lẽ điều này sẽ giúp bạn tăng thêm một chút.
ThorstenS

5

Nếu bạn chỉ cần xem thống kê kết nối, hãy thử sstiện ích từ iproutebộ:

# ss -s
Total: 1788 (kernel 3134)
TCP:   1638 (estab 1409, closed 162, orphaned 0, synrecv 0, timewait 127/0), ports 0

Transport Total     IP        IPv6
*         3134      -         -        
RAW       0         0         0        
UDP       74        69        5        
TCP       1476      1444      32       
INET      1550      1513      37       
FRAG      0         0         0     

Bạn cũng có thể xem thông tin chi tiết về tất cả các kết nối được thiết lập như thế này:

ss -n state established

Chỉ kết nối hoặc ssh:

ss -n state established '( dport = :ssh or sport = :ssh )'

Một số phần ở dưới cùng của trang này cũng có thể bạn quan tâm.


+1 vì không sử dụng netstat không dùng nữa
Joshua Griffiths

Tôi biết điều này là từ 6 năm trước, nhưng bạn hoặc bất kỳ ai khác có một liên kết đến một cái gì đó phá vỡ đầu ra trạng thái ss. Tôi đặc biệt tò mò về số lượng cổng ở cuối dòng TCP. Tôi đang thực hiện một số thử nghiệm so sánh giữa hai máy chủ đóng vai trò cân bằng tải và trên một cổng đếm dao động khoảng 1000 và mặt khác luôn là 0. Điều đó cụ thể là gì?
RobertRSeatussy

1
@RobertRSeatussy bởi mã nguồn ss, có vẻ như số này được đọc từ tcp_bind_bucketdòng /proc/slabinfotệp. Bạn có thể muốn so sánh đầu ra awk 'NR==2||/tcp_bind_bucket/' /proc/slabinfogiữa hai máy chủ của mình. Thông tin chi tiết có thể có thể được tìm thấy ở đâu đó trong các nguồn hạt nhân.
artyom

1

Một lựa chọn khác là đọc /proc/net/tcptrực tiếp. Để xem tất cả các kết nối TCP được thiết lập trên, 8080, bạn sẽ làm một cái gì đó như

$ printf %04X 8080
1F90
$ grep :1F90 /proc/net/tcp | grep ' 01 ' | wc -l

Nếu bạn muốn thực hiện nó trong một quy trình duy nhất (ít chi phí IO hơn) và xử lý các trường hợp góc, phần sau đây sẽ cho bạn biết có bao nhiêu kết nối TCP THÀNH LẬP có cổng cục bộ 8080:

$ perl -anle '
          $F[1] =~ /:1F90/ and $F[3] =~ /01/ and $cnt++;
          END { print 0+$cnt }
         '  /proc/net/tcp

Nếu phần mềm trên máy của bạn nghe trên 8080 có hỗ trợ IPv6, bạn cũng cần đọc /proc/net/tcp6; nếu chương trình sử dụng ổ cắm IPv6, các kết nối sẽ hiển thị ở đó ngay cả khi họ đang sử dụng IPv4.


0

dễ dàng hơn là

#netstat -at | wc -l

Nó sẽ hiển thị số lượng kết nối TCP trên hệ thống ...


Việc này sẽ mất nhiều thời gian hơn vì bạn không sử dụng cờ "n" để ngăn không cho nó tra cứu tất cả tên máy chủ. Nó cũng sẽ hiển thị những thứ khác ngoài các kết nối cổng 8080 mà câu hỏi đã đề cập.
Jenny D
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.