Skip to content

Commit

Permalink
Release 0.13.0b
Browse files Browse the repository at this point in the history
  • Loading branch information
lmsecure committed Nov 29, 2024
1 parent 3650639 commit 7a01c5c
Show file tree
Hide file tree
Showing 24 changed files with 1,720 additions and 907 deletions.
2 changes: 1 addition & 1 deletion debian/changelog
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
setezor (0.12.0b) kali-dev; urgency=medium
setezor (0.13.0b) kali-dev; urgency=medium

* Initial release

Expand Down
3 changes: 2 additions & 1 deletion setezor/app_routes/api/object.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ async def create_object(self, request: PMRequest):
db = await get_db_by_session(request)
data: NodeCreateJsonResponse = await request.json()
ip = data.get('label')
mask = data.get('mask', 24)
os = data.get('os')
mac = data.get('mac')
domain = data.get('domain')
Expand All @@ -56,7 +57,7 @@ async def create_object(self, request: PMRequest):
mac_object = db.mac.get_by_mac(mac=mac)
if mac_object:
return Response(status=404, reason='На данный момент нельзя добавлять mac к существующему ip')
ip_obj: IP = db.ip.create(ip=ip, mac=mac, domain_name=domain)
ip_obj: IP = db.ip.create(ip=ip, mac=mac, mask=mask, domain_name=domain)
if vendor:
db.mac.add_vendor(mac=ip_obj._mac, vendor=vendor)

Expand Down
84 changes: 84 additions & 0 deletions setezor/app_routes/api/task.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from base64 import b64decode
import magic
import copy
import ipaddress
from aiohttp.web import Response, json_response
from setezor.app_routes.session import (
project_require,
Expand Down Expand Up @@ -584,4 +585,87 @@ async def SNMP_crawler_task(self, request: PMRequest):
await scheduler.spawn_job(SnmpCrawlerTask(observer=project.observer,scheduler=scheduler,
name=f'Task {task_id}',task_id=task_id,
db=db, agent_id=agent_id, ip=ip, port=port, snmp_version=snmp_version, community_string=community_string))
return Response(status=201)


@BaseView.route('POST', '/network_division')
@project_require
async def network_division(self, request: PMRequest):
project = await get_project(request=request)
db = project.db
params: dict = await request.json()

network = params.get("network")
new_masks = params.get("buttonValues")

network = ipaddress.ip_network(network)
new_networks = []
curent_address = network.network_address
for mask in new_masks:
new_subnet = ipaddress.ip_network(f"{curent_address}/{mask}")
new_networks.append(new_subnet)
if str(new_subnet.broadcast_address) != "255.255.255.255":
curent_address = new_subnet.broadcast_address + 1

session = db.db.create_session()
ip_net_list = session.query(db.ip.model, db.network.model).join(db.network.model, db.ip.model.network_id == db.network.model.id).all()
session.close()

for ip_obj, network_obj in ip_net_list:
curent_ip = ipaddress.ip_interface(f"{ip_obj.ip}/{network_obj.mask}")
if curent_ip in network:
for new_network in new_networks:
if curent_ip in new_network:
new_network_obj = db.network.get_or_create(ip=ip_obj.ip, mask=new_network.prefixlen, type_id=network_obj.type_id)
db.ip.update_by_id(id = ip_obj.id, to_update={"network_id" : new_network_obj.id})

return Response(status=201)


@BaseView.route('GET', '/get_merged_networks')
@project_require
async def get_merged_networks(self, request: PMRequest):
project = await get_project(request=request)
db = project.db
params: dict = request.rel_url.query

ip_target = params.get("ip_target")
new_mask = params.get("new_mask")

new_subnetwork = ipaddress.ip_network(f"{ip_target}/{new_mask}", strict=False)

session = db.db.create_session()
ip_net_list = session.query(db.ip.model, db.network.model).join(db.network.model, db.ip.model.network_id == db.network.model.id).all()
session.close()

result = set()
for ip_obj, network_obj in ip_net_list:
if ipaddress.ip_interface(f"{ip_obj.ip}/{network_obj.mask}") in new_subnetwork:
result.add(network_obj.network)

return json_response(list(result))


@BaseView.route('POST', '/network_merge')
@project_require
async def network_merge(self, request: PMRequest):
project = await get_project(request=request)
db = project.db
params: dict = await request.json()

ip_target = params.get("ip_target")
network = params.get("network")
new_mask = params.get("new_mask")

new_subnetwork = ipaddress.ip_network(f"{ip_target}/{new_mask}", strict=False)

session = db.db.create_session()
ip_net_list = session.query(db.ip.model, db.network.model).join(db.network.model, db.ip.model.network_id == db.network.model.id).all()
session.close()

for ip_obj, network_obj in ip_net_list:
if ipaddress.ip_interface(f"{ip_obj.ip}/{network_obj.mask}") in new_subnetwork:
new_network_obj = db.network.get_or_create(ip=ip_obj.ip, mask=new_mask, type_id=network_obj.type_id)
db.ip.update_by_id(id = ip_obj.id, to_update={"network_id" : new_network_obj.id})

return Response(status=201)
7 changes: 4 additions & 3 deletions setezor/app_routes/pages/info.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,12 @@ async def info_page(request: PMRequest) -> Response:
project_id = project.configs.variables.project_id
context = {'tabs': [{'name': i.model.get_name().lower(),
'base_url': f'/api/{i.model.__name__.lower()}',
'is_hide': i in [db.ip, db.mac, db.port, db.task],
# ! Добавить db.network как будет готово
'columns': i.model.get_headers_for_table()} for i in [db.ip, db.mac, db.port, db.task,
db.pivot, db.pivot_ip_mac_port,
'columns': i.model.get_headers_for_table()} for i in [db.pivot, db.pivot_ip_mac_port,
db.pivot_domain_ip,
db.pivot_software_vulnerability_link]],
db.pivot_software_vulnerability_link,
db.ip, db.mac, db.port, db.task,]],
'current_project': project_name, 'current_project_id': project_id,
'interfaces': [i for i in get_interfaces() if i.ip_address]}

Expand Down
Loading

0 comments on commit 7a01c5c

Please sign in to comment.