Skip to content

Commit c17fcd5

Browse files
Adding in block volume script
1 parent b80f25d commit c17fcd5

File tree

12 files changed

+480
-193
lines changed

12 files changed

+480
-193
lines changed

.pre-commit-config.yaml

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
# .pre-commit-config.yaml
22
repos:
3-
- repo: https://github.com/Yelp/detect-secrets
3+
- repo: https://github.com/Yelp/detect-secrets
44
rev: v1.4.0
55
hooks:
6-
- id: detect-secrets
7-
args: ['--baseline', '.secrets.baseline']
6+
- id: detect-secrets
7+
args: ["--baseline", ".secrets.baseline"]
88
exclude: package.lock.json
9-
- repo: https://github.com/asottile/reorder-python-imports
9+
- repo: https://github.com/asottile/reorder-python-imports
1010
rev: v3.12.0
1111
hooks:
12-
- id: reorder-python-imports
12+
- id: reorder-python-imports
13+
- repo: https://github.com/pre-commit/mirrors-prettier
14+
rev: v3.0.3 # Use the sha / tag you want to point at
15+
hooks:
16+
- id: prettier

classic-virtual/details.py

Lines changed: 85 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,94 @@
11
import json
2+
import socket
3+
import threading
4+
from concurrent.futures import ThreadPoolExecutor
25

36
import SoftLayer
7+
from rich import box
8+
from rich import print as rprint
9+
from rich.console import Console
10+
from rich.table import Table
411

512
client = SoftLayer.create_client_from_env()
613

7-
vm_id = 137682113
14+
def get_vms(client):
15+
vms = client['Account'].getVirtualGuests()
16+
return [vm for vm in vms if vm.get('primaryIpAddress')]
817

9-
def print_keys(d, parent_key=''):
10-
for k, v in d.items():
11-
key = parent_key + '.' + k if parent_key else k
12-
if isinstance(v, dict):
13-
print_keys(v, key)
14-
else:
15-
print(key)
18+
def get_vm_details(vm):
19+
# Get VM details
20+
vm_id = vm['id']
21+
mask = "mask[id,globalIdentifier,fullyQualifiedDomainName,hostname,domain,createDate,modifyDate,provisionDate,notes,dedicatedAccountHostOnlyFlag,privateNetworkOnlyFlag,primaryBackendIpAddress,primaryIpAddress,networkComponents[id,status,speed,maxSpeed,name,macAddress,primaryIpAddress,port,primarySubnet,securityGroupBindings[securityGroup[id, name]]],lastKnownPowerState.name,powerState,status,maxCpu,maxMemory,datacenter,activeTransaction[id, transactionStatus[friendlyName,name]],lastOperatingSystemReload.id,blockDevices,blockDeviceTemplateGroup[id, name, globalIdentifier],postInstallScriptUri,operatingSystem[passwords[username,password],softwareLicense.softwareDescription[manufacturer,name,version,referenceCode]],softwareComponents[passwords[username,password,notes],softwareLicense[softwareDescription[manufacturer,name,version,referenceCode]]],hourlyBillingFlag,userData,billingItem[id,package,nextInvoiceTotalRecurringAmount,nextInvoiceChildren[description,categoryCode,recurringFee,nextInvoiceTotalRecurringAmount],children[description,categoryCode,nextInvoiceTotalRecurringAmount],orderItem[id,order.userRecord[username],preset.keyName]],tagReferences[id,tag[name,id]],networkVlans[id,vlanNumber,networkSpace],dedicatedHost.id,transientGuestFlag,lastTransaction[transactionGroup]]"
22+
return client['Virtual_Guest'].getObject(id=vm_id, mask=mask)
1623

17-
vm_details = client['Virtual_Guest'].getObject(id=vm_id)
24+
def check_port(ip, port):
25+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
26+
result = sock.connect_ex((ip, port))
27+
sock.close()
28+
return port if result == 0 else None
1829

19-
print_keys(vm_details)
30+
def scan_hosts(hosts, port):
31+
results = []
32+
with ThreadPoolExecutor() as executor:
33+
futures = [executor.submit(check_port, vm['primaryIpAddress'], port)
34+
for vm in hosts]
35+
for future in futures:
36+
port, vm = future.result()
37+
if port:
38+
results.append((port, vm))
39+
return results
40+
41+
def main():
42+
43+
windows_table = Table(show_header=True, header_style="white", box=box.ROUNDED)
44+
windows_table.add_column("Server ID")
45+
windows_table.add_column("Public IP")
46+
windows_table.add_column("Open Port")
47+
windows_table.add_column("Provision Date")
48+
windows_table.add_column("Provisioned By")
49+
50+
linux_table = Table(show_header=True, header_style="blue", box=box.ROUNDED)
51+
linux_table.add_column("Server ID")
52+
linux_table.add_column("Public IP")
53+
linux_table.add_column("Open Port")
54+
linux_table.add_column("Provision Date")
55+
linux_table.add_column("Provisioned By")
56+
57+
try:
58+
client = SoftLayer.create_client_from_env()
59+
60+
vms = get_vms(client)
61+
62+
win_vms = []
63+
nix_vms = []
64+
for vm in vms:
65+
details = get_vm_details(vm)
66+
if details['operatingSystem']['softwareLicense']['softwareDescription']['referenceCode'].startswith('WIN_'):
67+
win_vms.append(details)
68+
else:
69+
nix_vms.append(details)
70+
71+
rprint("Checking ports on Windows hosts")
72+
win_ports = scan_hosts(win_vms, 3389)
73+
for port, vm in win_ports:
74+
windows_table.add_row(str(vm['id']), str(vm['primaryIpAddress']),
75+
str(port), str(vm['provisionDate']),
76+
str(vm['billingItem']['orderItem']['order']['userRecord']['username']))
77+
78+
rprint("Checking ports on Linux hosts")
79+
nix_ports = scan_hosts(nix_vms, 22)
80+
for port in nix_ports:
81+
vm = port['vm']
82+
linux_table.add_row(str(vm['id']), str(vm['primaryIpAddress']),
83+
str(port), str(vm['provisionDate']),
84+
str(vm['billingItem']['orderItem']['order']['userRecord']['username']))
85+
86+
console = Console()
87+
console.print(windows_table)
88+
console.print(linux_table)
89+
90+
except Exception as e:
91+
rprint(f"Error: {e}")
92+
93+
if __name__ == "__main__":
94+
main()

classic-virtual/scanGuests.py

Lines changed: 0 additions & 108 deletions
This file was deleted.

classic-virtual/richListScans.py renamed to classic-virtual/scanVirtualGuests.py

Lines changed: 53 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from rich.console import Console
99
from rich.table import Table
1010

11-
windows_table = Table(show_header=True, header_style="green", box=box.ROUNDED)
11+
windows_table = Table(show_header=True, header_style="white", box=box.ROUNDED)
1212
linux_table = Table(show_header=True, header_style="blue", box=box.ROUNDED)
1313

1414
linux_table.add_column("Server ID")
@@ -17,6 +17,12 @@
1717
linux_table.add_column("Provision Date")
1818
linux_table.add_column("Provisioned By")
1919

20+
windows_table.add_column("Server ID")
21+
windows_table.add_column("Public IP")
22+
windows_table.add_column("Open Port")
23+
windows_table.add_column("Provision Date")
24+
windows_table.add_column("Provisioned By")
25+
2026
def check_port(ip, port):
2127

2228
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
@@ -69,45 +75,59 @@ def check_port(ip, port):
6975
'provision_user': provision_user
7076
})
7177

72-
batch_size = 10
73-
print("Checking ports on Nix hosts")
74-
# Split nix_hosts into batches
75-
nix_batches = [nix_hosts[i:i+batch_size] for i in range(0, len(nix_hosts), batch_size)]
76-
77-
for batch in nix_batches:
78+
def nix_host_scan():
79+
batch_size = 10
80+
print("Checking ports on Nix hosts")
81+
# Split nix_hosts into batches
82+
nix_batches = [nix_hosts[i:i+batch_size] for i in range(0, len(nix_hosts), batch_size)]
83+
84+
for batch in nix_batches:
85+
86+
threads = []
87+
88+
for vm in batch:
89+
ip = vm['public_ip']
90+
open_port = check_port(ip, 22)
91+
id = vm['server_id']
92+
user = vm['provision_user']
93+
date = vm['provision_date']
94+
95+
if open_port:
96+
linux_table.add_row(str(id), str(ip), str(open_port), str(date), str(user))
97+
7898

79-
threads = []
99+
console = Console()
80100

81-
for vm in batch:
82-
ip = vm['public_ip']
83-
open_port = check_port(ip, 22)
84-
id = vm['server_id']
85-
user = vm['provision_user']
86-
date = vm['provision_date']
87-
88-
if open_port:
89-
linux_table.add_row(str(id), str(ip), str(open_port), str(date), str(user))
101+
console.print(linux_table)
90102

91-
print("Checking ports on Windows hosts")
92-
# Split windows_hosts into batches
93-
win_batches = [win_hosts[i:i+batch_size] for i in range(0, len(win_hosts), batch_size)]
103+
def win_host_scan():
104+
batch_size = 10
105+
print("Checking ports on Windows hosts")
106+
# Split windows_hosts into batches
107+
win_batches = [win_hosts[i:i+batch_size] for i in range(0, len(win_hosts), batch_size)]
94108

95-
for batch in win_batches:
109+
for batch in win_batches:
96110

97-
threads = []
111+
threads = []
98112

99-
for vm in batch:
100-
ip = vm['public_ip']
101-
open_port = check_port(ip, 3389)
102-
id = vm['server_id']
103-
user = vm['provision_user']
104-
date = vm['provision_date']
113+
for vm in batch:
114+
ip = vm['public_ip']
115+
open_port = check_port(ip, 3389)
116+
id = vm['server_id']
117+
user = vm['provision_user']
118+
date = vm['provision_date']
119+
120+
if open_port:
121+
windows_table.add_row(str(id), str(ip), str(open_port), str(date), str(user))
105122

106-
if open_port:
107-
windows_table.add_row(str(id), str(ip), str(open_port), str(date), str(user))
123+
console = Console()
124+
console.print(windows_table)
108125

126+
try:
127+
nix_host_scan()
128+
win_host_scan()
109129

110-
console = Console()
130+
except:
131+
print("Error: unable to start thread")
111132

112-
console.print(linux_table)
113-
console.print(windows_table)
133+
#

0 commit comments

Comments
 (0)