1. 程式人生 > >Python 掃描內網所有機器埠

Python 掃描內網所有機器埠

'''
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()