Python 掃描內網所有機器埠
阿新 • • 發佈:2019-01-07
''' Python 掃描內網所有機器埠 ''' import socket def main(): #定義一個變數來接收輸入的開始IP ip_start = input('請輸入開始的IP地址(預設為本機IP):') #如果IP為空則設定開始IP和結束IP if ip_start == '': ip_start = socket.gethostbyname(socket.gethostname()) ip_end = socket.gethostbyname(socket.gethostname()) #開始IP不為空則設定結束IP else: ip_end = input('請輸入結束IP(預設為本機IP):') #如果IP結束地址為空則設定結束IP地址 if ip_end == '': ip_end = socket.gethostbyname(socket.gethostname()) #定義一個變數來接收需要掃描的埠 s = input('請輸入目標主機埠,(預設掃描常用埠)') #如果接收的埠變數為空,則設定預設掃描開始埠 if s == '': portlist = [21,22,23,80,135,139,445,1433,1502,3306,3389,8080,9015] #如果接收的埠變數不為空,則設定結束埠 else: #將接收的埠s轉換成int型變數 startport = int(s) #定義一個變數接收結束埠 s = input('請輸入目標主機結束埠:(預設:65535)') #如果結束埠為空,則設定預設結束埠為65535 if s =='': endport = 65535 #預設埠不為空,則將接收到的埠字元轉換成int型 else: #將結束埠s變數轉換為int型 endport = int(s) #用range()函式生成開始埠到結束埠列表 portlist = [i for i in range(startport,endport+1)] #獲取IP地址的前三部分,並轉換成字串 pre_ip='.'.join(ip_start.split('.')[:-1]) #獲取開始IP的最後部分,並轉換成整數型別 start=int(ip_start.split('.')[-1]) #獲取結束IP的最後部分,並轉換為整數型別 end=int(ip_end.split('.')[-1]) #從起始IP最後數字到結束IP最後數字加一遍歷 for i in range(start,end+1): #IP的前三部分加小圓點加最後部分,組合成IP ip = pre_ip+'.'+str(i) for port in portlist: try: sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM) sk.settimeout(0.1) sk.connect((ip,port)) sk.settimeout(None) print('Server %s port %d ok!'%(ip,port)) sk.close() #結果儲存在檔案中 f = open("IP_Port.txt,",'a') f.write(ip+' : '+str(port)+'\n') f.close() except Exception: #print('Server %s port %d Not ok!'%(ip,port)) #print('*',end=' ') pass if __name__ == '__main__': #呼叫main()函式 main()