Lót
Tôi đã kết hợp một lớp lót đẹp, nhanh chóng phục vụ mục đích, cho phép lấy một số cổng tùy ý trong một phạm vi tùy ý (ở đây được chia thành 4 dòng để dễ đọc):
comm -23 \
<(seq "$FROM" "$TO" | sort) \
<(ss -tan | awk '{print $4}' | cut -d':' -f2 | grep '[0-9]\{1,5\}' | sort -u) \
| shuf | head -n "$HOWMANY"
Từng dòng
comm
là một tiện ích so sánh các dòng trong hai tệp phải xuất hiện được sắp xếp theo thứ tự abc. Nó xuất ra ba cột: các dòng chỉ xuất hiện trong tệp đầu tiên, các dòng chỉ xuất hiện trong cột thứ hai và các dòng chung. Bằng cách chỉ định -23
chúng tôi triệt tiêu các cột sau và chỉ giữ cột đầu tiên. Chúng ta có thể sử dụng điều này để có được sự khác biệt của hai bộ, được biểu thị dưới dạng một chuỗi các dòng văn bản. Tôi đã học về comm
đây .
Tệp đầu tiên là phạm vi cổng mà chúng ta có thể chọn. seq
tạo ra một chuỗi các số được sắp xếp từ $FROM
đến $TO
. Kết quả được sắp xếp theo thứ tự abc (thay vì số) và được chuyển comm
thành tập tin đầu tiên sử dụng thay thế quy trình .
Tệp thứ hai là danh sách các cổng được sắp xếp mà chúng ta có được bằng cách gọi ss
lệnh (với -t
nghĩa là các cổng TCP, -a
nghĩa là tất cả - được thiết lập và lắng nghe - và -n
số - không cố gắng giải quyết, nói, 22
thành ssh
). Sau đó chúng tôi chỉ chọn cột thứ tư với awk
, chứa địa chỉ và cổng cục bộ. Chúng tôi sử dụng cut
để phân tách địa chỉ và cổng với :
dấu phân cách và chỉ giữ lại cái sau ( -f2
). ss
cũng xuất ra một tiêu đề mà chúng ta loại bỏ bằng grep
ping cho các chuỗi số không trống không dài hơn 5. Sau đó, chúng tôi tuân thủ comm
yêu cầu của chúng bằng cách nhập sort
mà không trùng lặp -u
.
Bây giờ chúng ta có một danh sách sắp xếp các cổng mở, mà chúng ta có thể shuf
chạy đến sau đó lấy các cổng đầu tiên "$HOWMANY"
với head -n
.
Thí dụ
Lấy ba cổng mở ngẫu nhiên trong phạm vi riêng tư (49152-65535)
comm -23 <(seq 49152 65535 | sort) <(ss -tan | awk '{print $4}' | cut -d':' -f2 | grep "[0-9]\{1,5\}" | sort -u) | shuf | head -n 3
có thể trở lại ví dụ
54930
57937
51399
Ghi chú
- chuyển
-t
với -u
trong ss
để có được cổng UDP miễn phí thay thế.
- thay thế
shuf
bằng sort -n
nếu bạn muốn có được các cổng có sẵn được sắp xếp bằng số thay vì ngẫu nhiên
-n
vào netstat và một grep chọn lọc hơn). Cách thực hiện là thử và mở một cổng ở bất kỳ chế độ nào bạn cần và thử một cổng khác nếu không có sẵn.