python常用脚本

名字处理

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)
posted @ 2023-02-10 16:23  lifei888  阅读(86)  评论(0)    收藏  举报