當前位置:首頁 » 編程語言 » pythonscan

pythonscan

發布時間: 2022-05-16 23:22:44

❶ 在python中range怎麼用

range函數原型:range(start, end, scan)

參數含義:

start:計數的開始位置,默認是從0開始。

end: 計數的結束位置

scan:每次跳躍的間距,默認為1。

range()函數內只有一個參數,則表示會產生從0開始計數到輸入參數(前一位整數)結束的整數列表
當range()函數傳入兩個參數時,則將第一個參數做為起始位,第二個參數為結束位
當range()函數內填入第三個參數時,第三個參數表示遞增或遞減值,默認為1

❷ 如何使用Python工具分析風險數據

1、引入工具–載入數據分析包
啟動IPython notebook,載入運行環境:
%matplotlib inline
import pandas as pd
from datetime import timedelta, datetime
import matplotlib.pyplot as plt
import numpy as np
2、數據准備
俗話說: 巧婦難為無米之炊。小安分析的數據主要是用戶使用代理IP訪問日誌記錄信息,要分析的原始數據以CSV的形式存儲。這里首先要介紹到pandas.read_csv這個常用的方法,它將數據讀入DataFrame
analysis_data = pd.read_csv('./honeypot_data.csv')
對的, 一行代碼就可以將全部數據讀到一個二維的表結構DataFrame變數,感覺很簡單有木有啊!!!當然了用Pandas提供的IO工具你也可以將大文件分塊讀取,再此小安測試了一下性能,完整載入約21530000萬條數據也大概只需要90秒左右,性能還是相當不錯。
3、數據管窺
一般來講,分析數據之前我們首先要對數據有一個大體上的了解,比如數據總量有多少,數據有哪些變數,數據變數的分布情況,數據重復情況,數據缺失情況,數據中異常值初步觀測等等。下面小安帶小夥伴們一起來管窺管窺這些數據。
使用shape方法查看數據行數及列數
analysis_data.shape
Out: (21524530, 22) #這是有22個維度,共計21524530條數據記的DataFrame
使用head()方法默認查看前5行數據,另外還有tail()方法是默認查看後5行,當然可以輸入參數來查看自定義行數
analysis_data.head(10)
這里可以了解到我們數據記錄有用戶使用代理IP日期,代理header信息,代理訪問域名,代理方法,源ip以及蜜罐節點信息等等。在此小安一定一定要告訴你,小安每次做數據分析時必定使用的方法–describe方法。pandas的describe()函數能對數據進行快速統計匯總:
對於數值類型數據,它會計算出每個變數: 總個數,平均值,最大值,最小值,標准差,50%分位數等等;
非數值類型數據,該方法會給出變數的: 非空值數量、unique數量(等同於資料庫中distinct方法)、最大頻數變數和最大頻數。
由head()方法我們可以發現數據中包含了數值變數、非數值變數,我們首先可以利用dtypes方法查看DataFrame中各列的數據類型,用select_dtypes方法將數據按數據類型進行分類。然後,利用describe方法返回的統計值對數據有個初步的了解:
df.select_dtypes(include=['O']).describe()
df.select_dtypes(include=['float64']).describe()
簡單的觀察上面變數每一維度統計結果,我們可以了解到大家獲取代理數據的長度平均1670個位元組左右。同時,也能發現欄位scanossubfp,scanscan_mode等存在空值等等信息。這樣我們能對數據整體上有了一個大概了解。
4、數據清洗
由於源數據通常包含一些空值甚至空列,會影響數據分析的時間和效率,在預覽了數據摘要後,需要對這些無效數據進行處理。
一般來說,移除一些空值數據可以使用dropna方法, 當你使用該方法後,檢查時發現 dropna() 之後幾乎移除了所有行的數據,一查Pandas用戶手冊,原來不加參數的情況下, dropna() 會移除所有包含空值的行。
如果你只想移除全部為空值的列,需要加上 axis 和 how 兩個參數:
analysis_data.dropna(axis=1, how='all')
另外,也可以通過dropna的參數subset移除指定列為空的數據,和設置thresh值取移除每非None數據個數小於thresh的行。
analysis_data.dropna(subset=['proxy_host', 'srcip'])
#移除proxy_host欄位或srcip欄位沒有值的行
analysis_data.dropna(thresh=10)
#移除所有行欄位中有值屬性小於10的行
5、統計分析
再對數據中的一些信息有了初步了解過後,原始數據有22個變數。從分析目的出發,我將從原始數據中挑選出局部變數進行分析。這里就要給大家介紹pandas的數據切片方法loc。
loc([startrowindex:endrowindex,[『timestampe』, 『proxy_host』, 『srcip』]])是pandas重要的切片方法,逗號前面是對行進行切片;逗號後的為列切片,也就是挑選要分析的變數。
如下,我這里選出日期,host和源IP欄位——
analysis_data = analysis_data.loc([:, [『timestampe』,'proxy_host','srcip']])
首先讓我們來看看蜜罐代理每日使用數據量,我們將數據按日統計,了解每日數據量PV,並將結果畫出趨勢圖。
daily_proxy_data = analysis_data[analysis_data.mole=='proxy']
daily_proxy_visited_count = daily_proxy_data.timestamp.value_counts().sort_index()
daily_proxy_visited_count.plot()
對數據列的丟棄,除無效值和需求規定之外,一些表自身的冗餘列也需要在這個環節清理,比如說DataFrame中的index號、類型描述等,通過對這些數據的丟棄,從而生成新的數據,能使數據容量得到有效的縮減,進而提高計算效率。
由上圖分析可知蜜罐代理使用量在6月5號,19-22號和25號這幾天呈爆炸式增長。那麼這幾天數據有情況,不正常,具體是神馬情況,不急,後面小安帶大家一起來慢慢揪出來到底是那些人(源ip) 幹了什麼「壞事」。
進一步分析, 數據有異常後,再讓我們來看看每天去重IP數據後量及其增長量。可以按天groupby後通過nunique()方法直接算出來每日去重IP數據量。
daily_proxy_data = analysis_data[analysis_data.mole=='proxy']
daily_proxy_visited_count = daily_proxy_data.groupby(['proxy_host']).srcip.nunique()
daily_proxy_visited_count.plot()
究竟大部分人(源ip)在干神馬?干神馬?干神馬?讓我們來看看被訪問次數最多host的哪些,即同一個host關聯的IP個數,為了方便我們只查看前10名熱門host。
先選出host和ip欄位,能過groupby方法來group 每個域名(host),再對每個域名的ip訪問里unique統計。
host_associate_ip = proxy_data.loc[:, ['proxy_host', 'srcip']]
grouped_host_ip = host_associate_ip.groupby(['proxy_host']).srcip.nunique()
print(grouped_host_ip.sort_values(ascending=False).head(10))
再細細去看大家到底做了啥——查看日誌數據發現原來在收集像二手車價格,工人招聘等等信息。從熱門host來看,總得來說大家使用代理主要還是獲取網路,qq,Google,Bing這類婦孺皆知網站的信息。
下面再讓我們來看看是誰用代理IP「幹事」最多,也就是看看誰的IP訪問不同host的個數最多。
host_associate_ip = proxy_data.loc[:, ['proxy_host', 'srcip']]
grouped_host_ip = host_associate_ip.groupby(['srcip'_host']).proxy_host.nunique()
print(grouped_host_ip.sort_values(ascending=False).head(10))
哦,發現目標IP為123..*.155的小夥子有大量訪問記錄, 進而查看日誌,原來他在大量收集酒店信息。 好了,這樣我們就大概能知道誰在干什麼了,再讓我們來看看他們使用proxy持續時長,誰在長時間里使用proxy。 代碼如下——
這里不給大家細說代碼了,只給出如下偽代碼。
date_ip = analysis_data.loc[:,['timestamp','srcip']]
grouped_date_ip = date_ip.groupby(['timestamp', 'srcip'])
#計算每個源ip(srcip)的訪問日期
all_srcip_ration_times = ...
#算出最長連續日期天數
ration_date_cnt = count_date(all_srcip_ration_times)
好了,到此我也就初略的知道那些人做什麼,誰用代理時長最長等等問題額。取出ip = 80...38的用戶使用代理ip訪問數據日誌,發現原來這個小夥子在長時間獲取搜狐images。
蜜罐在全國各地部署多個節點,再讓我們來看看每個源ip掃描蜜罐節點總個數,了解IP掃描節點覆蓋率。結果見如下:
# 每個IP掃描的IP掃描節點總個數
node = df[df.mole=='scan']
node = node.loc[:,['srcip','origin_details']]
grouped_node_count = node.groupby(['srcip']).count()
print grouped_node_count.sort_values(['origin_details'], ascending=False).head(10)
由上述兩表初步可知,一些結論:如源ip為182...205的用戶長時間對蜜罐節點進行掃描,mark危險用戶等等。

❸ python scapy 和 scrapy的區別

我這實驗的結果是一個gethostbyaddr 2秒左右(沒用多線程)不知樓主的情況怎麼樣 另外,如果不是非python不可,可以考慮用nbtscan嘛,python的gethostbyaddr是用c寫的lib也就是說再優化也優化不到哪去的了

❹ 如何使用python在hbase里進行模糊查詢

注意:正則的寫法可能不對,保證能過濾出數據,但是可能不會嚴格匹配,正則問題請自己解決;
#導入thrift和habse包
from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from hbase import Hbase
from hbase.ttypes import *
#此處可以修改地址和埠
host = '192.168.1.1'
#默認埠為9090
port = 9090
#要查詢的表名
table = 'table_name'
#定義一個過濾器,此為關鍵步驟
filter = "RowFilter(=,'regexstring:.3333.')" #此行原創:)
# Make socket
transport = TSocket.TSocket(host, port)
# Buffering is critical. Raw sockets are very slow
# 還可以用TFramedTransport,也是高效傳輸方式
transport = TTransport.TBufferedTransport(transport)
# Wrap in a protocol
#傳輸協議和傳輸過程是分離的,可以支持多協議
protocol = TBinaryProtocol.TBinaryProtocol(transport)
#客戶端代表一個用戶
client = Hbase.Client(protocol)
#打開連接
try:
transport.open()
scan.filterString=filter
scanner = client.scannerOpenWithScan(table, scan)
except Exception:
finally:
client.scannerClose(scan)
transport.close()
連接代碼網上一搜一大堆,非原創,來源已不可考,非本人研究成果;
關鍵就是這個:"RowFilter(=,'regexstring:.3333.')"
這個過濾器要寫對,hbase有十幾種內置的過濾器方法,有幾種比較運算符和比較器,上面這個是正則方式,即'regexstring:.3333.';
過濾器整個雙引號裡面的內容會通過thrift傳給hbase服務端處理,下劃線這部分正則要支持java的正則要求不然會報錯,過濾器的用法官網有,網上也有些資料,但是坑比較多,這幾天各種被坑//包括官方坑
Apache HBase

❺ 如何使用多線程python掃描二級子域名

日站沒什麼好辦法了往往也會想到其二級域名,於是寫了一個比較簡陋的掃描二級域名的程序
速度一般般,不過如果線程開多了還是可以的
源程序(subdomain.py):

#! /usr/bin/env python
#coding=utf-8
import threading , Queue, optparse, os
import pycurl, StringIO, msvcrt, socket

queue = Queue.Queue()

class ScanThread(threading.Thread):

def __init__(self, queue):
threading.Thread.__init__(self)
self.queue = queue

def run(self):
while 1:
p = self.queue.get()
if p is None:
break
try:
sub_domain = p+'.'+domain
crl = pycurl.Curl()
crl.fa = StringIO.StringIO()
crl.setopt(pycurl.URL,sub_domain)
crl.setopt(pycurl.VERBOSE,0)
crl.setopt(pycurl.FOLLOWLOCATION,1)
crl.setopt(pycurl.MAXREDIRS,5)
crl.setopt(pycurl.CONNECTTIMEOUT, 60)
crl.setopt(pycurl.TIMEOUT, 300)
crl.setopt(crl.WRITEFUNCTION,crl.fa.write)
try:
crl.perform()
ip=socket.gethostbyname(sub_domain)
print sub_domain, ip
content = sub_domain+' '+ip+'\n'
self.writefile(wfile, 'a+', content)
except:
pass
except:
print "error"
self.writefile('F:/py/Domain/log.txt', 'a+', p+'\n')

queue.task_done()

def writefile(self, path, type, content):
f = open(path, type)
f.write(content)
f.close

class ThreadGetKey(threading.Thread):
def run(self):
while 1:
try:
chr = msvcrt.getch()
if chr == 'q':
print "stopped by your action ( q )"
os._exit(1)
else:
continue
except:
os._exit(1)

# now starting...

def main():
parser = optparse.OptionParser('Usages: %prog -d <domain> -r <read> -w <write> -t <thread(s)>')
parser.add_option('-d',dest='domain',type='string',help='the url to query')
parser.add_option('-r',dest='read',type='string',help='the dic file to read default=F:/py/Domain/dic.txt', default='F:/py/Domain/dic.txt')
parser.add_option('-w',dest='write',type='string',help='save the reasults to the catalogue \
default=F:/py/Domain/results.txt', default='F:/py/Domain/results.txt')
parser.add_option('-t',dest='threads',type='int',help='set the thread(s) default=10',default=10)
(options,args) = parser.parse_args()
if options.domain == None:
使用方法:
python subdomain.py -d .com -r dic.txt -w results.txt -t 50
主要影響速度的是這一塊代碼:

try:
crl.perform()
ip=socket.gethostbyname(sub_domain)
print sub_domain, ip
content = sub_domain+' '+ip+'\n'
self.writefile(wfile, 'a+', content)
except:
pass

主要是一開始理解錯了,以為二級域名不存在和某個網頁不存在一樣會返回404代碼,於是想到用返回碼來判斷。
結果後來程序一直出錯,才發現當二級域名不存在的時候返回的是「未找到伺服器」,根本不存在返回碼,於是只能使用一個try來調試錯誤,主要速度也就被這里影響了。當然線程開多了也是可以看到刷屏效果的~~

❻ python中的for i in range怎麼用

  • 先要知道rang的作用。range(2,4),其代表[2,3,4]

  • 其實Python 的 for i in range (m,n)

  • 相當於 C++/Java/C# 裡面的 for (int i = m; i < n; i++)

  • 比如range(1,10)

❼ python 急救!在線等

你將leixicon.scan改成leixicon().scan

再試試應該可以了。可能是類沒有實例化。

❽ 如何掃描網路中的埠 python

>>>fromsocketimportsocket
>>>defscan_address(host,port):
s=socket()
s.settimeout(3)
try:
s.connect((host,port))
except:
returnFalse
s.close()
returnTrue

>>>scan_address('localhost',5432)
True

熱點內容
蘋果像素低為什麼比安卓好 發布:2025-05-14 19:13:23 瀏覽:459
安卓機微信怎麼設置紅包提醒 發布:2025-05-14 19:00:15 瀏覽:271
androidsystem許可權設置 發布:2025-05-14 18:56:02 瀏覽:970
mq腳本 發布:2025-05-14 18:45:37 瀏覽:25
仙境傳說ro解壓失敗 發布:2025-05-14 18:45:01 瀏覽:868
betweenand的用法sql 發布:2025-05-14 18:39:25 瀏覽:250
tplink攝像頭存儲卡格式化 發布:2025-05-14 18:37:08 瀏覽:347
安卓平板怎麼安裝excel的軟體 發布:2025-05-14 18:35:44 瀏覽:42
廣州數控圓弧編程實例 發布:2025-05-14 18:25:00 瀏覽:401
搭建伺服器能使用nodejs開發嗎 發布:2025-05-14 18:24:14 瀏覽:136