名字处理
def init(data):
data['first']={}
data['middle']={}
data['last']={}
def lookup(data,label,name):
return data[label].get(name)
def store(data,*full_names):
for full_name in full_names:
names=full_name.split()
if len(names)==2:names.insert(1,'')
labels='first','middle','last'
for label,name in zip(labels,names):
people=lookup(data,label,name)
if people:
people.append(full_name)
else:
data[label][name]=[full_name]
MyNames={}
init(MyNames)
store(MyNames,'Li Fei')
store(MyNames,'Ge Ai Qing')
store(MyNames,'Zhao Bo')
store(MyNames,'Wang Zhen Qing','Li Qiang')
print lookup(MyNames,'middle','')
二分法查找
def search(sequence,number,lower=0,upper=None):
if upper is None:upper=len(sequence)-1
if lower==upper:
try:
assert number==sequence[upper]
except:
lower="not found"
return lower
else:
middle=(lower+upper)/2
if number>sequence[middle]:
return search(sequence,number,middle+1,upper)
else:
return search(sequence,number,lower,middle)
seq=[10,50,9,8,7,3,90,100,850]
seq.sort()
print search(seq,8)
数据库操作
~ > cat ABBREV.txt 15:26:22
07278~^~HORMEL SPAM .. PORK W/ HAM MINCED CND~^ ... ^ ~ 1 serving ~^^ ~~^0^abcdd^abcd^
~ > cat importdata.py
import sqlite3
def convert(value):
if value.startswith('~'):
return value.strip('~')
else:
value = '0'
return float(value)
conn=sqlite3.connect('food.db')
curs=conn.cursor()
def createdb():
curs.execute('''
create table food(
id TEXT PRIMARY KEY,
desc TEXT,
water FLOAT,
kcal FLOAT,
protein FLOAT,
fat FLOAT,
ash FLOAT,
carbs FLOAT,
fiber FLOAT,
sugar FLOAT
)
''')
createdb() #创建db
query='insert into food values(?,?,?,?,?,?,?,?,?,?)'
for line in open('ABBREV.txt'):
fields=line.split('^')
vals=[convert(f) for f in fields]
print (vals)
print len(vals)
curs.execute(query,vals)
conn.commit()
conn.close()
~ > cat food_query.py
import sqlite3,sys
conn=sqlite3.connect('food.db')
curs=conn.cursor()
query='select * from food'
curs.execute(query)
names=[f[0] for f in curs.description]
print names
for row in curs.fetchall():
print row
for pair in zip(names,row):
print '%s:%s' %pair
字母按序生成
def next_ord(zimu):
num=ord(zimu)
num=num+1
return chr(num)
def next_string(start):
lastzimu=start[-1]
if lastzimu != 'z':
lastzimu=next_ord(lastzimu)
result=start[:-1]+lastzimu
elif lastzimu == 'z':
lastzimu='a'
result=next_string(start[:-1])+lastzimu
return result
start='abefghddeffaabace'
for i in range(8000):
print(start)
start=next_string(start)
域名解析及ip判断脚本
import dns.resolver
import netaddr
import socket
def get_ip_addresses_with_timeout(domain, timeout=0.5):
try:
# 创建一个新的 Resolver 对象
resolver = dns.resolver.Resolver()
# 设置超时时间(秒)
resolver.timeout = timeout
# 使用dnspython库进行域名解析
result = resolver.resolve(domain, 'A')
addresses = [ip.address for ip in result]
return addresses
except:
return None
def get_ip_addresses(domain):
try:
# 使用dnspython库进行域名解析
result = dns.resolver.resolve(domain, 'A')
addresses = [ip.address for ip in result]
return addresses
except:
return None
def ipshouji():
ipset=netaddr.IPSet()
for ip in open('ip.txt'):
ip=ip.strip()
if not ip:continue
ip=netaddr.IPNetwork(ip)
ipset.add(ip)
return ipset
def ippanduan(ip,ipset):
if ip in ipset:
return True
else:
return False
if __name__=='__main__':
ipset=ipshouji()
for name in open('aa.txt'):
name=name.strip()
if not name:continue
ips=get_ip_addresses_with_timeout(name)
#ips=get_ip_addresses(name)
ipset=ipshouji()
result='否'
if ips:
for ip in ips:
result=ippanduan(ip,ipset)
if result:
result="是"
break
result="否"
print(name,ips,result)
域名反解脚本案例
import dns.resolver
resolver = dns.resolver.Resolver()
resolver.timeout = 0.5
for num in range(0,255):
try:
ip='211.155.93.'+str(num)
result0 = resolver.resolve_address(ip)
result=[line for line in result0]
except:
result="null"
print(ip,result)
aslookup
pip install aslookup
cat aa.txt
import sys
from aslookup import get_as_data
ip=sys.argv[1]
as_num=get_as_data(ip,service="shadowserver").asn
print(as_num)
as下面地址整理
import requests
import re
import netaddr
ips=[]
obj=re.compile('<a href="/net/\d+.\d+.\d+.\d+/\d+">(?P<ipv4_prefix>\d+.\d+.\d+.\d+/\d+)</a>.*?',re.S)
url='https://bgp.he.net/AS24203#_prefixes'
dic={'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Mobile Safari/537.36'}
resp=requests.get(url,headers=dic) #处理反爬
content=resp.text
resp.close()
result=obj.finditer(content)
for it in result:
ip=(it.group('ipv4_prefix'))
ip=netaddr.IPNetwork(ip)
if ip not in ips:
ips.append(ip)
for ip in netaddr.cidr_merge(ips):
print("set routing-options static route %s next-hop 27.111.228.36" %ip)
subprocess mtr ping to excel
import subprocess
import pandas as pd
def command_exec(command,ip):
if command=='mtr':
command=f"mtr --no-dns -c 3 -r -z {ip}"
elif command=='ping':
command=f"ping -c 3 {ip}"
output_file = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
output_text = output_file.stdout.read().decode()
return output_text
if __name__=='__main__':
dic_list=[]
num=1
for line in open('aa.txt'):
command=f"echo {num} {line.rstrip()} > /root/resultnum.txt"
subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
line=line.strip()
if not line:continue
dic={}
mtr_result=command_exec('mtr',line)
ping_result=command_exec('ping',line)
dic['ip']=line
dic['mtr']=mtr_result
dic['ping']=ping_result
dic_list.append(dic)
num=num+1
df = pd.DataFrame(dic_list)
df.to_excel('result.xlsx', sheet_name='result', index=False)
apnic 地址获取
import re,requests
import numpy as np
import re,requests
import netaddr
def geg_log(num):
num=int(num)
length=32-int(np.log2(num))
return length
url=r'https://ftp.apnic.net/stats/apnic/delegated-apnic-latest'
head={"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"}
resp=requests.get(url,headers=head)
ips=[]
obj=re.compile(r'apnic\|TH\|ipv4\|(?P<ipv4>\d+\.\d+\.\d+\.\d+)\|(?P<size>\d+)\|')
for line in obj.finditer(resp.text):
ipv4=line.group('ipv4')
size=line.group('size')
length=geg_log(size)
ip=f"{ipv4}/{length}"
ip=netaddr.IPNetwork(ip)
ips.append(ip)
for ip in netaddr.cidr_merge(ips):
print(ip)