mirror of https://github.com/dnomd343/ProxyC
dnomd343
2 years ago
1 changed files with 68 additions and 0 deletions
@ -0,0 +1,68 @@ |
|||
#!/usr/bin/env python3 |
|||
# -*- coding: utf-8 -*- |
|||
|
|||
import time |
|||
import random |
|||
import socket |
|||
from Basis.Logger import logging |
|||
|
|||
|
|||
def genFlag(length: int = 12) -> str: # generate random task flag |
|||
flag = '' |
|||
for i in range(0, length): |
|||
tmp = random.randint(0, 15) |
|||
if tmp >= 10: |
|||
flag += chr(tmp + 87) # a ~ f |
|||
else: |
|||
flag += str(tmp) # 0 ~ 9 |
|||
logging.debug('generate new flag -> ' + flag) |
|||
return flag |
|||
|
|||
|
|||
def getAvailablePort(rangeStart: int = 41952, rangeEnd: int = 65535) -> int: # get a available port |
|||
if rangeStart > rangeEnd or rangeStart < 1 or rangeEnd > 65535: |
|||
raise RuntimeError('invalid port range') |
|||
while True: |
|||
port = random.randint(rangeStart, rangeEnd) # choose randomly |
|||
if checkPortStatus(port): |
|||
logging.debug('get new port -> %i' % port) |
|||
return port |
|||
time.sleep(0.1) # wait for 100ms |
|||
|
|||
|
|||
def checkPortStatus(port: int) -> bool: # check if the port is occupied |
|||
ipv4Tcp = None |
|||
ipv4Udp = None |
|||
ipv6Tcp = None |
|||
ipv6Udp = None |
|||
try: |
|||
ipv4Tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
|||
ipv4Udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) |
|||
ipv4Tcp.bind(('0.0.0.0', port)) |
|||
ipv4Udp.bind(('0.0.0.0', port)) |
|||
ipv4Tcp.close() |
|||
ipv4Udp.close() |
|||
ipv6Tcp = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) |
|||
ipv6Udp = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM) |
|||
ipv6Tcp.bind(('::', port)) |
|||
ipv6Udp.bind(('::', port)) |
|||
ipv6Tcp.close() |
|||
ipv6Udp.close() |
|||
logging.debug('check status of port %i -> available' % port) |
|||
return True # IPv4 TCP / IPv4 UDP / IPv6 TCP / IPv6 UDP are normal |
|||
except: |
|||
logging.debug('check status of port %i -> occupied' % port) |
|||
return False |
|||
finally: # close socket |
|||
try: |
|||
ipv4Tcp.close() |
|||
except: pass |
|||
try: |
|||
ipv4Udp.close() |
|||
except: pass |
|||
try: |
|||
ipv6Tcp.close() |
|||
except: pass |
|||
try: |
|||
ipv6Udp.close() |
|||
except: pass |
Loading…
Reference in new issue