一、選取乙個有開放api的ip位址庫
經比較,選擇ip-api這個庫(免費,一天內不限制次數),備選ipwois
def getisp(ip):遇到的問題:ip-api限制一分鐘內只能查詢大約50個ip,超過後獲取不到資料,故在出現異常後,通過time.sleep(60)實現1min的緩衝時間(造成時間浪費,窮沒得辦法)try:
proxies =
res = requests.get('' + ip, headers=,timeout=(1000,2000),proxies = proxies).content
#res = requests.get('' + ip, headers=, timeout=(100, 200)).content
print(ip)
data = json.loads(res)
if data['status'] == 'success':
return data['country'], data['isp'], data['as']
else:
'''data = ipwhois(ip).lookup_whois()
asn2 = data['asn']
country2 = pycountry.countries.get(alpha_2=data['asn_country_code']).name
isp2 = data['asn_description']'''
return 'fail', 'fail', 'fail'
except exception as e:
print("getisp出現異常:"+str(e))
''' data = ipwhois(ip).lookup_whois()
asn2 = data['asn']
country2 = pycountry.countries.get(alpha_2=data['asn_country_code']).name
isp2 = data['asn_description']'''
time.sleep(60)
return 'fail', 'fail','fail'
二、將查詢到的ip資訊存入資料庫
def update_isp (number):遇到的問題:效能還是效能,一開始的update語句中的條件是where prefix=,導致存資料庫很慢,後來改為主鍵條件where number=,儲存變快了許多try:
conn = pool.connection()
cur = conn.cursor()
for i in range(50000):
rows_count,subnet = inquery_prefix(number)
if rows_count > 0:
subnet = ''.join(subnet)
country1,isp1,asn1 = getisp(subnet)
country = str(country1)
isp = str(isp1)
val = (country1,isp1,number)
sql = "update routes set `country`=%s,`isp`=%s where number = %s"
print("update routes set `country`=%s"%country+ ",`isp`=%s"%isp+" where number = %d"%int(number))
cur.execute(sql,val)
number = str(int(number) + 1)
conn.commit()
else:
number = str(int(number) + 1)
return number
except exception as e:
print('update_isp出現異常:' +str(e))
三、其他
1、本來想爬取全球80萬條路由條目的資訊,並通過多執行緒併發爬取,結果發現python的多執行緒太假,並不能提高效率
2、受限於api分鐘內有次數限制,頻繁查詢獲取不到資料,導致2min內只能存50條路由條目,80萬條路由條目要爬幾十天,有點坑坑,計畫持續優化(**能力渣渣的網工的淚)
網工 IP協議與IP位址
tcp ip體系中的網路層協議,是方便計算機網路通資訊的協議。版本 4位二進位制,標識版本號。頭部長度 標識ip協議對的頭部長度,該欄位表示的的單位數是32bit,常用值為5,也是可取值的最小值,表示報頭為20位元組,最大值是15,表示報頭60位元組 如果有額外的 ip 的 options 選項,還...
python獲取區域網IP位址
設計思路 設計乙個udp資料報,併發送到公共的dns伺服器當中,udp資料報是盡最大努力不可靠交付,我們只需要獲取到udp頭部資訊即可 import socket def main get wlan ip def get wlan ip try socket.sock dgram代表的是socket...
網工 NA NAT位址轉換技術
私網位址與公網位址之間進行轉換 1.私網位址 可復用 10.0.0.0 10.255.255.255 172.16.0.0 172.31.255.255 192.168.0.0 192.168.255.255 2.公網位址 ip唯一 除私網位址及部分特殊位址 內部本地 轉換前內部源位址 外部本地 轉...