Write data

TODO:
- Searching
- Web page crawling?
This commit is contained in:
astatin3
2024-04-20 12:52:21 -06:00
parent c21af54bcd
commit ab8d739444
2 changed files with 92 additions and 18 deletions
+37 -18
View File
@@ -14,6 +14,7 @@ from threading import Thread
import nmap import nmap
import src.utils as utils import src.utils as utils
import src.jsonpack as jsonpack
import libs.scanutils as scanutils import libs.scanutils as scanutils
import libs.scanners.tcpScanner as tcpScanner import libs.scanners.tcpScanner as tcpScanner
@@ -122,25 +123,35 @@ def parseNmapResult(result: object, host: str):
# dict_keys(['hostnames', 'addresses', 'vendor', 'status', 'tcp', 'portused', 'osmatch']) # dict_keys(['hostnames', 'addresses', 'vendor', 'status', 'tcp', 'portused', 'osmatch'])
resultstr = '### Start Host Info ###\n' # resultstr = '### Start Host Info ###\n'
# location = scanutils.geolocation(host)
# location.pop('ip', None) # The geolocation string does not have to include the IP again
# compressedLocationData = base64.b64encode(
# zlib.compress(
# jsonpack.pack(location).encode())
# ).decode('ASCII')
resultstr += f'Address: {host}\n' resultstr = f'{host},1,{result.hostname()}'
resultstr += 'Status: Up\n'
resultstr += f'Hostname: {result.hostname()}\n'
resultstr += f'Location: {scanutils.geolocation(host)}\n'
osInfo = [] osInfo = []
if 'osmatch' in result: if 'osmatch' in result:
for os in result['osmatch']: for os in result['osmatch']:
osInfo.append([os["accuracy"], os["name"]]) osInfo.append([int(os["accuracy"]), os["name"]])
resultstr += f'OS-Info: {osInfo}\n' resultstr += f',{osInfo}'
resultstr += ',['
first = True
for protocol in result.all_protocols(): for protocol in result.all_protocols():
for portInt in result[protocol].keys(): for portInt in result[protocol].keys():
port = result[protocol][portInt] port = result[protocol][portInt]
resultstr += f'Port: {portInt},{protocol},{port["state"]},{port["reason"]}' if not first:
resultstr += ','
first = False
resultstr += f'[{portInt},{protocol},{port["state"]},{port["reason"]}'
if port['state'] == 'open': if port['state'] == 'open':
data = scan(host, portInt, protocol) data = scan(host, portInt, protocol)
@@ -148,20 +159,29 @@ def parseNmapResult(result: object, host: str):
resultstr += f',{compressedData}' resultstr += f',{compressedData}'
resultstr += "\n" resultstr += "]"
resultstr += '### End Host Info ###\n'
print(resultstr, end='') resultstr += "]"
print(resultstr)
write(host, resultstr)
def addOfflineHost(host:str): def addOfflineHost(host:str):
string = '### Start Host Info ###\n' + \ write(host, f'{host},0')
f'Address: {host}\n' + \
f'Status: Down\n' + \
'### End Host Info ###\n'
# print(string, end='') # print(string, end='')
def write(host:str, data:str):
split = host.split(".")
utils.makeDir(utils.getRoot(f"data/scans/{split[0]}/"))
with open(utils.getRoot(f"data/scans/{split[0]}/{split[1]}.txt"), "a") as file:
file.write(data + "\n")
def scan(host:str, port: int, protocol: str): def scan(host:str, port: int, protocol: str):
@@ -197,7 +217,6 @@ def printBar(percentage: float, cols: int):
def printIndicator(): def printIndicator():
return
hostSearchingCount = 0 hostSearchingCount = 0
nmapScanningCount = 0 nmapScanningCount = 0
furtherScanningCount = 0 furtherScanningCount = 0
+55
View File
@@ -0,0 +1,55 @@
import src.utils as utils
def parse_csv_line(line):
elements = []
current_element = ""
inside_array = False
array_content = ""
inside_quotes = False
for char in line:
if char == ',' and not inside_array and not inside_quotes:
if array_content:
elements.append(parse_csv_line(array_content[1:-1]))
array_content = ""
else:
elements.append(current_element.strip())
current_element = ""
elif char == '[' and not inside_quotes:
inside_array = True
array_content += char
elif char == ']' and not inside_quotes:
inside_array = False
array_content += char
elif char == "'":
inside_quotes = not inside_quotes
current_element += char
else:
if inside_array:
array_content += char
else:
current_element += char
if current_element:
if current_element.startswith("'") and current_element.endswith("'"):
current_element = current_element[1:-1]
elements.append(current_element.strip())
elif array_content:
elements.append(parse_csv_line(array_content[1:-1]))
return elements
def find():
# print("started!")
for folder in utils.listSubdirs(utils.getRoot("data/scans/")):
for file in utils.listSubdirs(utils.getRoot(f"data/scans/{folder}")):
with open(utils.getRoot(f"data/scans/{folder}/{file}"), "r") as file:
lines = file.readlines()
for line in lines:
data = parse_csv_line(line)
if data[1] != "1":
continue
print(f'{data[0]} ({data[2]}), {data[4]}')
# print("sotopped!!")