python构造IP报文实例
我就废话不多说了,大家还是直接看代码吧!
importsocket importsys importtime importstruct HOST,PORT="10.60.66.66",10086 defmake_forward_iphdr(source_ip='1.0.0.1',dest_ip='2.0.0.2',proto=socket.IPPROTO_UDP): #ipheaderfields ip_ihl=5 ip_ver=4 ip_tos=0 ip_tot_len=0#kernelwillfillthecorrecttotallength ip_id=54321#Idofthispacket ip_frag_off=0 ip_ttl=255 ip_proto=proto ip_check=0#kernelwillfillthecorrectchecksum ip_saddr=socket.inet_aton(source_ip)#Spoofthesourceipaddressifyouwantto ip_daddr=socket.inet_aton(dest_ip) ip_ihl_ver=(ip_ver<<4)+ip_ihl #the!inthepackformatstringmeansnetworkorder ip_header=struct.pack('!BBHHHBBH4s4s',ip_ihl_ver,ip_tos,ip_tot_len,ip_id,ip_frag_off,ip_ttl,ip_proto,ip_check,ip_saddr,ip_daddr) returnip_header defmake_forward_udphdr(src_port=1024,dst_port=10086): udp_header=struct.pack('!HHHH',src_port,dst_port,0,0) returnudp_header #checksumfunctionsneededforcalculationchecksum defchecksum(msg): s=0 #looptaking2charactersatatime foriinrange(0,len(msg),2): w=ord(msg[i])+(ord(msg[i+1])<<8) s=s+w s=(s>>16)+(s&0xffff); s=s+(s>>16); #complementandmaskto4byteshort s=~s&0xffff returns defmake_tcp_data(ip_header,src_port=1024,dst_port=10086,source_ip='1.0.0.1',dest_ip='2.0.0.2',user_data='test'): tcp_source=src_port#sourceport tcp_dest=dst_port#destinationport tcp_seq=454 tcp_ack_seq=0 tcp_doff=5#4bitfield,sizeoftcpheader,5*4=20bytes #tcpflags tcp_fin=0 tcp_syn=1 tcp_rst=0 tcp_psh=0 tcp_ack=0 tcp_urg=0 tcp_window=socket.htons(5840)#maximumallowedwindowsize tcp_check=0 tcp_urg_ptr=0 tcp_offset_res=(tcp_doff<<4)+0 tcp_flags=tcp_fin+(tcp_syn<<1)+(tcp_rst<<2)+(tcp_psh<<3)+(tcp_ack<<4)+(tcp_urg<<5) #the!inthepackformatstringmeansnetworkorder tcp_header=struct.pack('!HHLLBBHHH',tcp_source,tcp_dest,tcp_seq,tcp_ack_seq,tcp_offset_res,tcp_flags,tcp_window,tcp_check,tcp_urg_ptr) source_address=socket.inet_aton(source_ip) dest_address=socket.inet_aton(dest_ip) placeholder=0 protocol=socket.IPPROTO_TCP tcp_length=len(tcp_header)+len(user_data) psh=struct.pack('!4s4sBBH',source_address,dest_address,placeholder,protocol,tcp_length); psh=psh+tcp_header+user_data; tcp_check=checksum(psh) #printtcp_checksum #makethetcpheaderagainandfillthecorrectchecksum-rememberchecksumisNOTinnetworkbyteorder tcp_header=struct.pack('!HHLLBBH',tcp_source,tcp_dest,tcp_seq,tcp_ack_seq,tcp_offset_res,tcp_flags,tcp_window)+struct.pack('H',tcp_check)+struct.pack('!H',tcp_urg_ptr) #finalfullpacket-synpacketsdonthaveanydata packet=ip_header+tcp_header+user_data returnpacket
补充知识:python做在域名作为关键字的POST报文集合分类
将报文按域名分成不同的集合,而后写入excel,主要使用了字典数据结构
输入内容:
[域名,post报文(一个域名有多条,在不同行),域名类型]
输出内容:
[域名,POST报文集合,域名类型]
#-*-encoding:UTF-8-*- importopenpyxl fromopenpyxlimportload_workbook fromopenpyxlimportWorkbook importnumpyasnp importpandasaspd importre strinfo=re.compile('[]+') book=load_workbook('ex2.xlsx','utf-8') sheet=book.worksheets[0] rows=sheet.max_row cols=sheet.max_column Post={} Type={} foriinrange(2,rows+1):#向字典里添加元素 dn=sheet.cell(i,1).value pv=sheet.cell(i,2).value tv=sheet.cell(i,3).value ifPost.get(dn)==None:#第一次遇到這个域名 Post[dn]=pv Type[dn]=tv else: Post[dn]+='\n'+pv wb=Workbook() sh=wb.worksheets[0]#输出表格 foriinrange(2,rows+1):#从字典中取出内容存入excel dn=sheet.cell(i,1).value ifi==2: Post[dn]=Post[dn].replace('/','').replace(':','') Post[dn]=Post[dn].replace('(','').replace(')','') Post[dn]=Post[dn].replace('*','').replace(';','') Post[dn]=Post[dn].replace('\t','').replace('\n','') Post[dn]=Post[dn].replace('$','').replace('@','') Post[dn]=Post[dn].replace('=','').replace('&','') Post[dn]=Post[dn].replace(',','').replace('?','') Post[dn]=strinfo.sub('',Post[dn]) sh.append([dn,Post[dn],Type[dn]]) else: ifdn!=sheet.cell(i-1,1).value: Post[dn]=Post[dn].replace('/','').replace(':','') Post[dn]=Post[dn].replace('(','').replace(')','') Post[dn]=Post[dn].replace('*','').replace(';','') Post[dn]=Post[dn].replace('\t','').replace('\n','') Post[dn]=Post[dn].replace('$','').replace('@','') Post[dn]=Post[dn].replace('=','').replace('&','') Post[dn]=Post[dn].replace(',','').replace('?','') Post[dn]=strinfo.sub('',Post[dn]) sh.append([dn,Post[dn],Type[dn]]) else: continue replace('_x000D_','') wb.save('out.csv')
以上这篇python构造IP报文实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。