亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python使用scapy模塊實(shí)現(xiàn)ping掃描的過程詳解

 更新時(shí)間:2021年01月21日 14:32:17   作者:怪味巧克力  
這篇文章主要介紹了python使用scapy模塊實(shí)現(xiàn)ping掃描的過程詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

關(guān)于scapy

Scapy 是一個(gè)可以讓用戶發(fā)送、偵聽和解析并偽裝網(wǎng)絡(luò)報(bào)文的Python程序。這些功能可以用于制作偵測、掃描和攻擊網(wǎng)絡(luò)的工具。
換言之, Scapy 是一個(gè)強(qiáng)大的操縱報(bào)文的交互程序。它可以偽造或者解析多種協(xié)議的報(bào)文,還具有發(fā)送、捕獲、匹配請(qǐng)求和響應(yīng)這些報(bào)文以及更多的功能。 Scapy 可以輕松地做到像掃描(scanning)、路由跟蹤(tracerouting)、探測(probing)、單元測試(unit tests)、攻擊(attacks)和發(fā)現(xiàn)網(wǎng)絡(luò)(network discorvery)這樣的傳統(tǒng)任務(wù)。它可以代替 hping , arpspoof , arp-sk , arping , p0f 甚至是部分的 Namp , tcpdump 和 tshark 的功能

對(duì)于我來言,我認(rèn)為scapy最強(qiáng)大的特點(diǎn)就是scapy解碼不解釋,比如我們?cè)谟胣map進(jìn)行掃描的時(shí)候,結(jié)果往往是nmap已經(jīng)根據(jù)返回包的特征,然后輸出自己推測的結(jié)果,但是scapy是直接輸出返回包的內(nèi)容,這樣我們可以判斷的更加準(zhǔn)確

實(shí)現(xiàn)過程

接下來我將詳細(xì)的介紹如何使用scapy模塊編寫一個(gè)簡單的內(nèi)網(wǎng)掃描工具。

我先說一下我的腳本整個(gè)大致流程:

1.首先我們應(yīng)該編寫出能夠像單個(gè)IP發(fā)送ICMP包并接受回包的代碼

2.其次我們應(yīng)該開啟多進(jìn)程,從而讓該腳本可以快速掃描整個(gè)網(wǎng)段的主機(jī)存活情況

那么我們接下來就開始上面的流程。

單進(jìn)程發(fā)包

首先我們需要導(dǎo)入scapy模塊,這里要強(qiáng)調(diào)一下,scapy的v2版本的導(dǎo)入與別的模塊導(dǎo)入方式不同,需要特殊的書寫方式,否則scapy模塊中的某些功能將無法使用

from scapy.all import *
from random import randint

接下來需要構(gòu)造我們的包,即我們要發(fā)送的ICMP包,首先了解一下scapy包的偽造

對(duì)于scapy我們可以直接輸入scapy進(jìn)入一個(gè)交互模式,其實(shí)這個(gè)交互模式本質(zhì)也還是python,我們來看一下包

讀者可以看看我構(gòu)造的這個(gè)包,我寫了三個(gè)協(xié)議層,第一寫其實(shí)是mac地址,如果我們只輸入Ether,那么就是默認(rèn)的結(jié)果,這里的mac就是默認(rèn)廣播形式,第二個(gè)我寫的是IP,也就是IP層的設(shè)置,可以發(fā)現(xiàn)其中的一些已經(jīng)填寫了默認(rèn)值,我們要設(shè)置的其實(shí)主要就的dst,即目的地址,當(dāng)然其他的想改一下也是可以的,比如說把ttl生存周期改成128,這也是沒毛病的,第三個(gè)我寫的是TCP,即我發(fā)送的包是TCP包,其中也有一些默認(rèn)值,我們看到有個(gè)window,這個(gè)其實(shí)就是程序的進(jìn)程號(hào)。

那么既然我們是ping包,我們就使用ICMP包,那么我們來看一下ICMP包

看到ICMP的值更少一些,其中type表示這個(gè)包是請(qǐng)求包還是回應(yīng)包。

那我們既然知道如何構(gòu)造包了,那就動(dòng)手構(gòu)造一個(gè)

def scapy_ping_one(host):
 id_ip = randint(1, 65535)
 id_ping = randint(1, 65535)
 seq_ping = randint(1, 65535)
 packet = IP(dst=host, ttl=128, id=id_ip) / ICMP(id=id_ping, seq=seq_ping) / b'I am Ameng'

這里我設(shè)置的id號(hào)其實(shí)不設(shè)置也可以,這個(gè)就是標(biāo)識(shí)包的信息,后面的字節(jié)流也可以不填寫,不影響結(jié)果

既然構(gòu)造完了,那么我們就要發(fā)送,如何發(fā)送呢?這就用到了scapy中的一個(gè)函數(shù)sr

sr() 函數(shù)是用來發(fā)送數(shù)據(jù)包和接收應(yīng)答。該函數(shù)返回一對(duì)數(shù)據(jù)包及其應(yīng)答,還有無應(yīng)答的數(shù)據(jù)包。 sr1() 函數(shù)是一種變體,用來返回一個(gè)應(yīng)答數(shù)據(jù)包。發(fā)送的數(shù)據(jù)包必須是第3層報(bào)文(IP,ARP等)。 srp() 則是使用第2層報(bào)文(以太網(wǎng),802.3等)

這里使用sr1()

ping = sr1(packet, timeout=0.2, verbose=False)

介紹一下參數(shù),其實(shí)看名字前兩個(gè)沒什么問題,我這里主要說一下第三個(gè)參數(shù),第三個(gè)參數(shù)的意思是說關(guān)閉詳細(xì)信息,因?yàn)槲覀冎豢唇Y(jié)果,這樣界面更整潔

到這里發(fā)送單個(gè)包并接受單個(gè)包的ping代碼已經(jīng)實(shí)現(xiàn),整體代碼如下:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author:Ameng jlx-love.com


from scapy.all import *
from random import randint

def scapy_ping_one(host):
 id_ip = randint(1, 65535)
 id_ping = randint(1, 65535)
 seq_ping = randint(1, 65535)
 packet = IP(dst=host, ttl=128, id=id_ip) / ICMP(id=id_ping, seq=seq_ping) / b'I am Ameng'
 ping = sr1(packet, timeout=0.2, verbose=False)
 if ping:
  os._exit(3)

if __name__ == '__main__':
 scapy_ping_one(sys.argv[1])

多進(jìn)程發(fā)包

這里主要是將單進(jìn)程的代碼實(shí)現(xiàn)多進(jìn)程,那么我們什么時(shí)候會(huì)用到多進(jìn)程呢?我們一般都是判斷一個(gè)網(wǎng)段有哪些主機(jī)存活,所以我們一般的輸入格式都是這樣子的,比如:192.168.10.0/24,所以我們首先需要將用戶的這個(gè)輸入變成一個(gè)這個(gè)網(wǎng)段的各個(gè)地址,這里用到ipaddress模塊,可以自動(dòng)實(shí)現(xiàn)這個(gè)功能

其次我們需要開啟多個(gè)進(jìn)程來同時(shí)進(jìn)行不同ip地址的ping檢測,所以我們引入multiprocessing模塊,開啟多個(gè)進(jìn)程。

代碼如下:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author:Ameng jlx-love.com
import time
import multiprocessing
from scapy_ping_one import scapy_ping_one
from scapy.all import *
import ipaddress

def scapy_ping_scan(network):
 net = ipaddress.ip_network(network)
 ip_processes = {}
 for ip in net:
  ip_addr = str(ip)
  ping_one = multiprocessing.Process(target = scapy_ping_one, args = (ip_addr,))
  ping_one.start()
  ip_processes[ip_addr] = ping_one
 ip_list = []
 for ip, process in ip_processes.items():
  if process.exitcode == 3:
   ip_list.append(ip)
  else:
   process.terminate()
 return sorted(ip_list)

if __name__ == '__main__':
 import time
 t1 = time.time()
 active_ip = scapy_ping_scan(sys.argv[1])
 print('存活的ip地址:')
 for ip in active_ip:
  print(ip)
 t2 = time.time()
 print('所用時(shí)間為:{}s'.format(int(t2 - t1)))

到此,一個(gè)簡單的ping掃描即可實(shí)現(xiàn)

運(yùn)行結(jié)果

到此這篇關(guān)于python使用scapy模塊實(shí)現(xiàn)ping掃描的過程詳解的文章就介紹到這了,更多相關(guān)python scapy實(shí)現(xiàn)ping掃描內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何將python代碼打包成pip包(可以pip?install)

    如何將python代碼打包成pip包(可以pip?install)

    這篇文章主要介紹了如何將python代碼打包成pip包(可以pip?install),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • python讀取Excel表格文件的方法

    python讀取Excel表格文件的方法

    這篇文章主要介紹了python讀取Excel表格文件的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 基于Pandas讀取csv文件Error的總結(jié)

    基于Pandas讀取csv文件Error的總結(jié)

    今天小編就為大家分享一篇基于Pandas讀取csv文件Error的總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • python 批量修改/替換數(shù)據(jù)的實(shí)例

    python 批量修改/替換數(shù)據(jù)的實(shí)例

    今天小編就為大家分享一篇python 批量修改/替換數(shù)據(jù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • python寫入中英文字符串到文件的方法

    python寫入中英文字符串到文件的方法

    這篇文章主要介紹了python寫入中英文字符串到文件的方法,實(shí)例分析了Python操作中英文字符串的技巧,非常簡單實(shí)用,需要的朋友可以參考下
    2015-05-05
  • 一篇文章帶你搞定Python多進(jìn)程

    一篇文章帶你搞定Python多進(jìn)程

    Python中的多進(jìn)程是通過multiprocessing包來實(shí)現(xiàn)的,和多線程的threading.Thread差不多,它可以利用multiprocessing.Process對(duì)象來創(chuàng)建一個(gè)進(jìn)程對(duì)象。本文將帶你深入了解Python多線程,需要的可以參考一下
    2022-01-01
  • Python中使用裝飾器時(shí)需要注意的一些問題

    Python中使用裝飾器時(shí)需要注意的一些問題

    這篇文章主要介紹了Python中使用裝飾器時(shí)需要注意的一些問題,裝飾器是Python學(xué)習(xí)進(jìn)階中的重要知識(shí)點(diǎn),需要的朋友可以參考下
    2015-05-05
  • Redis之windows下主從復(fù)制案例講解

    Redis之windows下主從復(fù)制案例講解

    這篇文章主要介紹了Redis之windows下主從復(fù)制案例講解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Python雙向循環(huán)鏈表實(shí)現(xiàn)方法分析

    Python雙向循環(huán)鏈表實(shí)現(xiàn)方法分析

    這篇文章主要介紹了Python雙向循環(huán)鏈表,結(jié)合實(shí)例形式分析了Python雙向鏈表的定義、遍歷、添加、刪除、搜索等相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • Python?數(shù)據(jù)分析教程探索性數(shù)據(jù)分析

    Python?數(shù)據(jù)分析教程探索性數(shù)據(jù)分析

    這篇文章主要介紹了Python?數(shù)據(jù)分析教程探索性數(shù)據(jù)分析,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08

最新評(píng)論