mirror of
https://github.com/Astatin3/ip-hilbert.git
synced 2026-06-08 16:08:00 -06:00
Make this into more of a CLI thing. Also write some code
This commit is contained in:
@@ -0,0 +1,156 @@
|
||||
import sys
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
import matplotlib.colors as colors
|
||||
from utils import *
|
||||
|
||||
order=16
|
||||
grid_size=128
|
||||
def line_chart(x,y ):
|
||||
plt.plot(x, y)
|
||||
plt.show()
|
||||
|
||||
|
||||
def graph_density(ip_list: str):
|
||||
xarr = []
|
||||
yarr = []
|
||||
for ip in ip_list:
|
||||
try:
|
||||
if ":" in ip:
|
||||
ip = ip_to_int(ip.split(":")[0])
|
||||
else:
|
||||
ip = ip_to_int(ip)
|
||||
except ValueError as e:
|
||||
print(e)
|
||||
continue
|
||||
x, y = d2xy(2**order, ip)
|
||||
xarr.append(x)
|
||||
yarr.append(y)
|
||||
|
||||
|
||||
fig, ax = plt.subplots(figsize=(64, 64))
|
||||
|
||||
# Create density grid
|
||||
H, xedges, yedges = np.histogram2d(xarr, yarr, bins=grid_size, range=[[0, 2**order], [0, 2**order]])
|
||||
|
||||
# Plot heatmap
|
||||
im = ax.imshow(H.T, cmap='YlOrRd', extent=[0, 2**order, 0, 2**order], origin='lower',
|
||||
norm=colors.LogNorm(vmin=1, vmax=H.max()))
|
||||
# Plot points
|
||||
ax.scatter(xarr, yarr, color='blue', s=1, alpha=0.5)
|
||||
|
||||
ax.set_xlim(0, 2 ** order)
|
||||
ax.set_ylim(0, 2 ** order)
|
||||
|
||||
# plt.colorbar(im, label='Number of IPs')
|
||||
plt.axis('on')
|
||||
plt.show()
|
||||
|
||||
def graph_ports(ip_list: str):
|
||||
count = np.zeros(65536)
|
||||
|
||||
for ip in ip_list:
|
||||
if not ":" in ip:
|
||||
continue
|
||||
port = int(ip.split(":")[1])
|
||||
count[port] += 1
|
||||
|
||||
line_chart(np.arange(0, 65536), count)
|
||||
|
||||
|
||||
def graph_nonstandard_ports(ip_list: str):
|
||||
xarr = []
|
||||
yarr = []
|
||||
colorarr = []
|
||||
for ip in ip_list:
|
||||
try:
|
||||
if ":" in ip:
|
||||
split = ip.split(":")
|
||||
ip = ip_to_int(split[0])
|
||||
if split[1] == "25565":
|
||||
colorarr.append('red')
|
||||
else:
|
||||
colorarr.append('blue')
|
||||
|
||||
else:
|
||||
ip = ip_to_int(ip)
|
||||
colorarr.append('green')
|
||||
except ValueError as e:
|
||||
print(e)
|
||||
continue
|
||||
x, y = d2xy(2**order, ip)
|
||||
xarr.append(x)
|
||||
yarr.append(y)
|
||||
|
||||
|
||||
fig, ax = plt.subplots(figsize=(12, 12))
|
||||
|
||||
# Create density grid
|
||||
H, xedges, yedges = np.histogram2d(xarr, yarr, bins=grid_size, range=[[0, 2**order], [0, 2**order]])
|
||||
|
||||
# Plot heatmap
|
||||
im = ax.imshow(H.T, cmap='YlOrRd', extent=[0, 2**order, 0, 2**order], origin='lower',
|
||||
norm=colors.LogNorm(vmin=1, vmax=H.max()))
|
||||
# Plot points
|
||||
ax.scatter(xarr, yarr, color=colorarr, s=1, alpha=0.5)
|
||||
|
||||
ax.set_xlim(0, 2 ** order)
|
||||
ax.set_ylim(0, 2 ** order)
|
||||
|
||||
# plt.colorbar(im, label='Number of IPs')
|
||||
plt.axis('on')
|
||||
plt.show()
|
||||
|
||||
def random_choord(H):
|
||||
weights = H.flatten()
|
||||
|
||||
weights = weights / np.sum(weights)
|
||||
index = np.random.choice(grid_size*grid_size, p=weights)
|
||||
x, y = divmod(index, grid_size)
|
||||
|
||||
x += np.random.random()
|
||||
y += np.random.random()
|
||||
|
||||
x /= grid_size
|
||||
y /= grid_size
|
||||
|
||||
x *= 2 ** order
|
||||
y *= 2 ** order
|
||||
|
||||
return x, y
|
||||
|
||||
|
||||
def generate_random_ips(ip_list: str, count: int):
|
||||
xarr = []
|
||||
yarr = []
|
||||
for ip in ip_list:
|
||||
try:
|
||||
if ":" in ip:
|
||||
split = ip.split(":")
|
||||
ip = ip_to_int(split[0])
|
||||
else:
|
||||
ip = ip_to_int(ip)
|
||||
except ValueError as e:
|
||||
print(e)
|
||||
continue
|
||||
x, y = d2xy(2**order, ip)
|
||||
xarr.append(x)
|
||||
yarr.append(y)
|
||||
|
||||
fig, ax = plt.subplots(figsize=(12, 12))
|
||||
|
||||
H, xedges, yedges = np.histogram2d(xarr, yarr, bins=grid_size, range=[[0, 2**order], [0, 2**order]])
|
||||
|
||||
|
||||
# x /= grid_size
|
||||
# y /= grid_size
|
||||
|
||||
# ips = []
|
||||
|
||||
print(count)
|
||||
|
||||
for i in range(count):
|
||||
x, y = random_choord(H)
|
||||
d = xy2d(2**order, x, y)
|
||||
ip = ip_int_to_ip(d)
|
||||
print(ip)
|
||||
Reference in New Issue
Block a user