(20250213) Small bug fix in the IPv4 range splitting function.
This commit is contained in:
@@ -290,9 +290,9 @@ class AsyncMikroTik:
|
|||||||
# Calculate the total number of IPs in the range:
|
# Calculate the total number of IPs in the range:
|
||||||
total_ips = int(end_ip_obj) - int(start_ip_obj) + 1
|
total_ips = int(end_ip_obj) - int(start_ip_obj) + 1
|
||||||
|
|
||||||
# Calculate the no. of IPs each VLAN gets,
|
# Calculate the no. of IPs each VLAN gets (subtract one because counting starts from 0),
|
||||||
# and add three (if asked) because we need IPs for network, gateway and broadcast:
|
# and add three (if asked) because we need IPs for network, gateway and broadcast:
|
||||||
ips_per_target = math.ceil(total_ips / target_count)
|
ips_per_target = math.ceil(total_ips / target_count) - 1
|
||||||
if consider_reserved_ips: ips_per_target += 3
|
if consider_reserved_ips: ips_per_target += 3
|
||||||
|
|
||||||
# Generate subnets for each VLAN:
|
# Generate subnets for each VLAN:
|
||||||
@@ -2327,9 +2327,10 @@ if __name__ == "__main__":
|
|||||||
HS_DHCP_SERVER_NAME = "easyfi-hs-dhcp-" + HS_VLAN_ID
|
HS_DHCP_SERVER_NAME = "easyfi-hs-dhcp-" + HS_VLAN_ID
|
||||||
HS_SNMP_COMMUNITY_NAME = "lkjhgfdsa1234567"
|
HS_SNMP_COMMUNITY_NAME = "lkjhgfdsa1234567"
|
||||||
|
|
||||||
HS_PUBLIC_IP_SUBNET = "154.84.218.42/25"
|
HS_PUBLIC_IP_SUBNET = "102.210.173.150/26"
|
||||||
HS_FIRST_PUBLIC_IP = "154.84.218.0"
|
HS_FIRST_PUBLIC_IP = "102.210.173.128"
|
||||||
HS_LAST_PUBLIC_IP = "154.84.218.127"
|
HS_LAST_PUBLIC_IP = "102.210.173.191"
|
||||||
|
|
||||||
HS_PRIVATE_IP_SUBNET = "100.65.0.0/22"
|
HS_PRIVATE_IP_SUBNET = "100.65.0.0/22"
|
||||||
HS_FIRST_PRIVATE_IP = "100.65.0.0"
|
HS_FIRST_PRIVATE_IP = "100.65.0.0"
|
||||||
HS_LAST_PRIVATE_IP = "100.65.3.255"
|
HS_LAST_PRIVATE_IP = "100.65.3.255"
|
||||||
@@ -2468,23 +2469,23 @@ if __name__ == "__main__":
|
|||||||
# print("MESSAGE:", api_response.message)
|
# print("MESSAGE:", api_response.message)
|
||||||
# print("JSON:", api_response.data)
|
# print("JSON:", api_response.data)
|
||||||
# print("\n\n")
|
# print("\n\n")
|
||||||
|
#
|
||||||
# STEP 8:
|
# # STEP 8:
|
||||||
# Add a new DHCP Network:
|
# # Add a new DHCP Network:
|
||||||
api_response = await my_mikrotik.add_dhcp_network(
|
# api_response = await my_mikrotik.add_dhcp_network(
|
||||||
json_payload = {
|
# json_payload = {
|
||||||
"address": HS_PRIVATE_IP_SUBNET,
|
# "address": HS_PRIVATE_IP_SUBNET,
|
||||||
"gateway": HS_GATEWAY_PRIVATE_IP,
|
# "gateway": HS_GATEWAY_PRIVATE_IP,
|
||||||
"netmask": HS_PRIVATE_IP_SUBNET.split("/")[-1],
|
# "netmask": HS_PRIVATE_IP_SUBNET.split("/")[-1],
|
||||||
"dns-server": HS_GATEWAY_PRIVATE_IP,
|
# "dns-server": HS_GATEWAY_PRIVATE_IP,
|
||||||
"comment": HS_COMMENT
|
# "comment": HS_COMMENT
|
||||||
}
|
# }
|
||||||
)
|
# )
|
||||||
print("STEP 8:", api_response.success, f"({api_response.action})")
|
# print("STEP 8:", api_response.success, f"({api_response.action})")
|
||||||
print("MESSAGE:", api_response.message)
|
# print("MESSAGE:", api_response.message)
|
||||||
print("JSON:", api_response.data)
|
# print("JSON:", api_response.data)
|
||||||
print("\n\n")
|
# print("\n\n")
|
||||||
|
#
|
||||||
# # STEP 9:
|
# # STEP 9:
|
||||||
# # Set up the Walled-Garden IP:
|
# # Set up the Walled-Garden IP:
|
||||||
# api_response = await my_mikrotik.add_hotspot_walled_garden_ip(
|
# api_response = await my_mikrotik.add_hotspot_walled_garden_ip(
|
||||||
@@ -2547,20 +2548,32 @@ if __name__ == "__main__":
|
|||||||
# print("JSON:", api_response.data)
|
# print("JSON:", api_response.data)
|
||||||
# print("\n\n")
|
# print("\n\n")
|
||||||
#
|
#
|
||||||
# # STEP 13:
|
# STEP 13:
|
||||||
# # Map the private IPs to the public IPs for NAT-ing:
|
# Map the private IPs to the public IPs for NAT-ing:
|
||||||
# public_ips = [
|
private_ips = [
|
||||||
# str(ipaddress.IPv4Address(_))
|
str(ipaddress.IPv4Address(_))
|
||||||
# for _ in range(
|
for _ in range(
|
||||||
# int(ipaddress.IPv4Address(HS_FIRST_PUBLIC_IP)),
|
int(ipaddress.IPv4Address(HS_FIRST_PRIVATE_IP)),
|
||||||
# int(ipaddress.IPv4Address(HS_LAST_PUBLIC_IP)) + 1
|
int(ipaddress.IPv4Address(HS_LAST_PRIVATE_IP)) + 1
|
||||||
# )
|
)
|
||||||
# ]
|
]
|
||||||
# nat_map = my_mikrotik.split_ipv4_range_in_powers_of_two(
|
public_ips = [
|
||||||
# start_ip = HS_FIRST_PRIVATE_IP,
|
str(ipaddress.IPv4Address(_))
|
||||||
# end_ip = HS_LAST_PRIVATE_IP,
|
for _ in range(
|
||||||
# targets = public_ips
|
int(ipaddress.IPv4Address(HS_FIRST_PUBLIC_IP)),
|
||||||
# )
|
int(ipaddress.IPv4Address(HS_LAST_PUBLIC_IP)) + 1
|
||||||
|
)
|
||||||
|
]
|
||||||
|
nat_map = my_mikrotik.split_ipv4_range_in_powers_of_two(
|
||||||
|
start_ip = HS_FIRST_PRIVATE_IP,
|
||||||
|
end_ip = HS_LAST_PRIVATE_IP,
|
||||||
|
targets = public_ips,
|
||||||
|
consider_reserved_ips = False
|
||||||
|
)
|
||||||
|
print("NAT MAP:", json.to_string(nat_map, default=str))
|
||||||
|
print("PRIVATE IP COUNT:", len(private_ips))
|
||||||
|
print("PUBLIC IP COUNT:", len(public_ips))
|
||||||
|
print("RULE COUNT:", len(nat_map))
|
||||||
# for index, nat_rule in enumerate(nat_map):
|
# for index, nat_rule in enumerate(nat_map):
|
||||||
# api_response = await my_mikrotik.add_firewall_nat(
|
# api_response = await my_mikrotik.add_firewall_nat(
|
||||||
# json_payload = {
|
# json_payload = {
|
||||||
|
|||||||
Reference in New Issue
Block a user