Tôi có một bảng các Dải IP và tôi cần tạo một danh sách các mạng để từ chối cho một quốc gia cụ thể.Chọn CIDR từ Phạm vi IP trong MySQL
Vì vậy, tôi có thể tạo danh sách các phạm vi ip từ db của tôi bằng cách sử dụng này.
SELECT
ip_from,
Inet_ntoa(ip_from),
ip_to,
Inet_ntoa(ip_to)
FROM
ip_address_data
WHERE
country_code = 'XX'
LIMIT 1
mà tạo ra kết quả này
ip_from inet_ntoa(ip_from) ip_to inet_ntoa(ip_to)
16777472 1.0.1.0 16778239 1.0.3.255
Nhưng tôi cần đầu ra ở định dạng CIDR và đôi khi phạm vi sẽ được nhiều hơn một hàng trở lại như thế này.
1.0.1.0/24
1.0.2.0/23
Có cách nào để tạo động bằng cách sử dụng câu lệnh chọn không? Cú pháp này sẽ là tuyệt vời nhưng tôi giả sử nó sẽ phải là một thủ tục được lưu trữ nếu nó sẽ trả về nhiều hơn một hàng đầu ra cho mỗi hàng đầu vào.
SELECT
CONCAT('/sbin/route add -net ', CONVERT_TO_CIDR(ip_from,ip_to), ' reject;') AS command
FROM
ip_info.ip_address_data
WHERE
country_code='XX'
lý do tại sao downvote? Lý do của bạn không hoạt động. Tôi không tìm kiếm ý kiến này là một vấn đề toán học đơn giản mà tôi cần giúp đỡ. – jbrahy
Cuộc trò chuyện này có thể giúp http://stackoverflow.com/questions/595748/is-there-way-to-match-ip-with-ipcidr-straight-from-select-query?rq=1 –