筆記整理1——python實現端口掃描器


1.編寫一個端口掃描器:代碼見文末尾

2.實現思路
(1).實現一個完整的TCP握手作為tcp端口是否開放的判斷依據
(2).給定一個ip和端口列表進行判斷端口是否開放,開放則加入列表中
(3).利用多線程實現高性能掃描,利用信號量防止線程沖突導致打印結果混亂
主要調用模塊:

import optparse
from socket import *
from threading import *

socket模塊常用於TCP端口連接
threading 模塊用於線程處理

optparse 模塊用於解析參數選項,如:
python xxx.py <-r file>  <>即為參數解析

設計了兩個函數
def connport(tHost,tPort): #與端口建立連接
def scanport(tHost,tPorts): #掃描主機的端口列表


線程的使用方法:
for tPort in tPorts:
# print '[*] scanning Port %d'%tPort 出現了神奇的BUG
  t = Thread(target=connport, args=(tHost,int(tPort)))
  t.start()
2.編寫一個調用Nmap工具的腳本:代碼

主要調用模塊
import nmap
import optparse
from threading import *
from socket import *
其中Nmap 模塊並非是python的內置庫

主要函數
def nmapScan(tHost,tPort):
def main():

3.復習思考
1.TCP端口掃描:
完整的TCP掃描使用操作系統原生網絡功能不能實現底層控制,因此這種掃描方式並不流行。並且TCP掃描很容易被發現,尤其作為端口清掃的手段:這些服務會記錄發送者的IP地址
2.利用ip連接:result = sock.connect_ex((target_ip, port))
利用主機名連接:result = sock.connect((target_host, port))
主機名除了web服務器比較好獲取,其他都難找到
python-namp包:
https://xael.org/pages/python-nmap-en.html
利用dns的api接口可以將ip進行反向解析。
可以導入dns模塊
3.可以考慮嘗試常用服務端口掃描后,對開放相應端口的主機進行漏洞檢測(即是否符合banner),如果有,實施攻擊(down機,藍屏,等)。

#!/usr/bin/python
# coding: utf-8

import nmap
import optparse
from threading import *
from socket import *

def nmapScan(tHost,tPort):
    nmscan = nmap.PortScanner()
    nmscan.scan(tHost,tPort)
    state = nmscan[tHost]['tcp'][int(tPort)]['state']
    print '[*] '+str(tHost) + 'tcp/' +str(tPort)+' '+str(state)

def main():
    parser = optparse.OptionParser('usage%prog'+' -H <target Host> -p <target Port>')# 參數解析
    parser.add_option('-H',dest='Host',type='string',help='specify Host')
    parser.add_option('-p',dest='Port',type='string',help='specify Port')
    (options, args) = parser.parse_args() #參數和parser實例建立聯系
    tHost = gethostbyname(options.Host)
    tPorts = str(options.Port).split(',')
    if(tHost == None) | (tPorts == None):
        print 'please input your Host and Port'
        exit(0)
    setdefaulttimeout(1)
    for tPort in tPorts:
        nmapScan(tHost,tPort)
      

if __name__ == '__main__':
    main()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM