python 實現 syn 掃描


1.scapy這個庫輕松實現構造數據包、發送數據包、分析數據包

2.scapy安裝:
    pip install scapy   ======> scapy不是內置模塊,故需要額外安裝

3.導入scapy方式:
from scapy.all import *

函數使用:
    sr1 函數來發送和接收第三層的數據包 sr1 表示一次只發送一次

SYN掃描:
1.向目標主機發送請求連接SYN包,掃描器收到SYN/ACK后,不是發送ACK應答而是發送RST請求斷開連接
判斷端口開放:1.Client發送SYN 2.Server端發送SYN/ACK 3.Client發送RST斷開
端口關閉: 1.Client發送SYN 2.Server端發送RST(表示端口斷開)

TCP3次握手:
    在TCP/IP協議中,TCP協議提供可靠的連接服務,
    采用三次握手建立一個連接。
    第一次握手:建立連接時,客戶端發送syn包(syn=j)到服務器,
    並進入SYN_SEND狀態,等待服務器確認;
    第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),
    即SYN+ACK包,此時服務器進入SYN_RECV狀態;

#!/usr/bin/python
from scapy.all import *
import socket
import time
#syn掃描
def syn_scan(target_ip,start,end):
  print('掃描主機:%s ......'%target_ip)
  i = 0
  for port in range(start, end):

    #sr1 向目標發送一個SYN分組(packet)
    a = sr1(IP(dst=target_ip) / TCP(dport=port), timeout=1, verbose=0)
    if a == None:
      pass

    else:
        #接收返回的數據包驗證flags 的值 即ACK+SYN回包的16進制數據轉為10進制 0X12
        # 轉成int 來判斷是否回包是ACK+SYN的值18是表示端口開放
      if int(a[TCP].flags) == 18:

        print('[*]'+ target_ip+' '+ str(port)+' 端口開放 ')
        i+=1
      else:
          pass
  print('[*]總共開放了 %s 個端口'%i)
#核驗ip是否輸入合格,還是網址
def checkip(hostip):

  pat = re.compile(r'([0-9]{1,3})\.')
  r = re.findall(pat, hostip + ".")
  if len(r) == 4 and len([x for x in r if int(x) >= 0 and int(x) <= 255]) == 4:
    return hostip
  else :
    domain_ip = socket.getaddrinfo(hostip,None)[0][4][0]
    return domain_ip

def run():
  print(' '*35+'SYN掃描器')
  print(' '*30+'退出程序請輸入exit'+' '*30)
  while True:
    host_ip = input("請輸入網址或者ip地址:")
    if host_ip=='exit':
      exit()
    else:
      if checkip(host_ip) != None:
        target_ip = checkip(host_ip)
        inputs = input('端口范圍eg:50-80: ')
        ports = inputs.split('-')
        start = int(ports[0])
        end = int(ports[1])
        syn_scan(target_ip, start, end)
        time.sleep(0.01)
        print('[*]主機:%s 掃描完成!'%target_ip)
        
if __name__ == '__main__':
  run()

 




免責聲明!

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



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