Thêm nhiều địa chỉ IP vào Windows Firewall bằng CLI không thành công một phần


0

Tôi có tập lệnh PowerShell bổ sung địa chỉ IP vào Tường lửa Windows bằng lệnh "Netsh advfirewall". (Như được mô tả trong câu hỏi này: Làm thế nào để nối các quy tắc tường lửa Netsh, không chỉ thay thế ).

Vấn đề là khi thêm nhiều địa chỉ IP (hiện có trên 700), chuỗi địa chỉ IP dường như bị 'cắt đứt' tại một số điểm. Chỉ có một lượng X trong tổng số lượng địa chỉ IP thực sự được thêm vào tường lửa, phần còn lại ... thì không.

Kịch bản rất đơn giản và trông giống như thế này:

$ip = "123.123.123.123,124.124.124.124,125.125.125.125 and so on"

netsh advfirewall firewall set rule name="*" new remoteip="$ip"

Tôi đã cố gắng lặp lại chuỗi để xem nếu nó bị cắt;

echo $ip

Nhưng chuỗi hoàn chỉnh được lặp lại chính xác.

Có một số loại giới hạn độ dài chuỗi cho lệnh Netsh? Hoặc bất cứ điều gì khác có thể gây ra vấn đề này?


Chỉnh sửa

Tôi đã thực hiện một số nghiên cứu thêm và có vẻ như chuỗi không bị 'cắt đứt'. Tôi đã sắp xếp lại chuỗi IP theo thứ tự tăng dần và địa chỉ IP cuối cùng của chuỗi đã được thêm vào tường lửa. Vì vậy, tôi cho rằng tôi có thể kết luận rằng không có một số loại giới hạn chuỗi.

Tuy nhiên, IP ngẫu nhiên đang bị bỏ qua. Tôi đã viết một số tập lệnh 'gỡ lỗi' để tìm hiểu chuyện gì đang xảy ra, một trong những tập lệnh đó tạo ra một danh sách các địa chỉ IP nằm trong chuỗi IP (và do đó được cho là nằm trong tường lửa), nhưng không có trong bức tường lửa. Hóa ra là nó chỉ đơn giản là bỏ qua các địa chỉ IP ngẫu nhiên ... và tôi không biết tại sao ...

Các địa chỉ IP đang bị bỏ qua là các địa chỉ IP hoàn toàn tốt (không phải là phạm vi hoặc bất cứ điều gì, chỉ là các địa chỉ IP thông thường).

Có ý kiến ​​gì không?


Câu trả lời:


0

Là một phương pháp thay thế khác (Vì đã có trong PowerShell):

Điều này sẽ cung cấp cho bạn nhiều thông tin hơn trên mỗi IP: Điều này không được kiểm tra, nhưng sẽ cung cấp cho bạn đầu ra / định dạng tốt hơn và tệ nhất là khởi đầu tốt và hoạt động trên lý thuyết.

$IPs = @("123.123.123.111", "123.123.123.112", "123.123.123.113") |`
   Foreach-object {
   netsh advfirewall firewall set rule name="*" new remoteip="$_"
   write-host "$_ Added $?"
}

Nếu nó hoạt động như mong đợi, nó sẽ lặp qua mảng $ IP ban đầu và thử lệnh Netsh. $?là trạng thái của lệnh chạy cuối cùng, vì vậy, trên lệnh Netsh thành công, nó sẽ in ra Windows PowerShell một cái gì đó giống như 123.123.123.111 Added Truehoặc 123.123.123.111 Added False.


Xin lỗi vì sự phản hồi chậm trễ của tôi. Tôi đã thực thi tập lệnh của bạn với tất cả các địa chỉ IP và tất cả chúng đều được thêm chính xác. Mặc dù họ đã thay thế nhau trong quy tắc tường lửa (như mong đợi). Vì vậy, có vẻ như các địa chỉ IP không phải là vấn đề. Phải có một số loại giới hạn ở đâu đó, tôi không thể tìm ra nó. Có lẽ tôi nên hỏi điều này trên các diễn đàn của Microsoft thay vì vấn đề này có lẽ là quá hiếm.
Thomas

Thay thế nhau? Như trong .111 thay thế .112? Trên thực tế, tôi có thể thấy Vấn đề: Thay đổi name="*"thành `name =" $ _ "trong tập lệnh.
Austin T Pháp

Có, thật không may, CLI của Windows Firewall không cho phép bạn thêm địa chỉ IP mà thay vào đó là thay thế các địa chỉ IP trong toàn bộ quy tắc. Vì vậy, khi bạn thực thi lệnh 'Netsh ...', chúng không được thêm vào quy tắc mà được thay thế. Lạ, tôi biết. Tôi không biết tại sao họ quyết định làm điều này, thêm một tính năng để thêm địa chỉ IP thay vì thay thế chúng có lẽ không quá khó ... nhưng vâng ... Microsoft.
Thomas

@ Bạn có thấy bản chỉnh sửa cuối cùng của tôi không? Tôi có thể đã tìm ra vấn đề ...
Austin T French

3
Xin lỗi, nhưng nếu bạn thêm hơn 700 địa chỉ IP thì có lẽ có điều gì đó lạ xảy ra. Đây không giống như một cơ hội tốt để sử dụng ký hiệu mạng con. Ngoài ra, có giới hạn 1000 IP theo câu hỏi khác này .
Seth
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.