python构造IP报文实例


Posted in Python onMay 05, 2020

我就废话不多说了,大家还是直接看代码吧!

import socket
import sys
import time
import struct
 
HOST, PORT = "10.60.66.66", 10086
 
def make_forward_iphdr(source_ip = '1.0.0.1', dest_ip = '2.0.0.2', proto = socket.IPPROTO_UDP) :
  # ip header fields
  ip_ihl = 5
  ip_ver = 4
  ip_tos = 0
  ip_tot_len = 0 # kernel will fill the correct total length
  ip_id = 54321  #Id of this packet
  ip_frag_off = 0
  ip_ttl = 255
  ip_proto = proto
  ip_check = 0  # kernel will fill the correct checksum
  ip_saddr = socket.inet_aton ( source_ip )  #Spoof the source ip address if you want to
  ip_daddr = socket.inet_aton ( dest_ip )
 
  ip_ihl_ver = (ip_ver << 4) + ip_ihl
 
  # the ! in the pack format string means network order
  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)
  return ip_header
 
def make_forward_udphdr(src_port = 1024, dst_port = 10086) :
  udp_header = struct.pack('!HHHH', src_port, dst_port, 0, 0)
  return udp_header
  
# checksum functions needed for calculation checksum
def checksum(msg):
  s = 0
 
  # loop taking 2 characters at a time
  for i in range(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);
 
  #complement and mask to 4 byte short
  s = ~s & 0xffff
 
  return s
  
def make_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  # source port
  tcp_dest = dst_port  # destination port
  tcp_seq = 454
  tcp_ack_seq = 0
  tcp_doff = 5  #4 bit field, size of tcp header, 5 * 4 = 20 bytes
  #tcp flags
  tcp_fin = 0
  tcp_syn = 1
  tcp_rst = 0
  tcp_psh = 0
  tcp_ack = 0
  tcp_urg = 0
  tcp_window = socket.htons (5840)  #  maximum allowed window size
  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 ! in the pack format string means network order
  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)
  #print tcp_checksum
 
  # make the tcp header again and fill the correct checksum - remember checksum is NOT in network byte order
  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)
 
  # final full packet - syn packets dont have any data
  packet = ip_header + tcp_header + user_data
  return packet

补充知识:python做在域名作为关键字的POST报文集合分类

将报文按域名分成不同的集合,而后写入excel,主要使用了字典数据结构

输入内容:

[域名,post报文(一个域名有多条,在不同行),域名类型]

输出内容:

[域名,POST报文集合,域名类型]

#-*- encoding:UTF-8 -*-
import openpyxl
from openpyxl import load_workbook
from openpyxl import Workbook
import numpy as np
import pandas as pd
import re
strinfo = re.compile('[ ]+')
book=load_workbook('ex2.xlsx','utf-8')
sheet=book.worksheets[0]
rows=sheet.max_row
cols=sheet.max_column
Post={}
Type={}
for i in range(2,rows+1):#向字典里添加元素
 dn=sheet.cell(i,1).value
 pv=sheet.cell(i,2).value
 tv=sheet.cell(i,3).value
 if Post.get(dn)==None:#第一次遇到?个域名
 Post[dn]=pv
 Type[dn]=tv
 else:
 Post[dn]+='\n'+pv
wb=Workbook()
sh=wb.worksheets[0]#输出表格
for i in range(2,rows+1):#从字典中取出内容存入excel
 dn=sheet.cell(i,1).value
 if i==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:
 if dn!=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报文实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现的系统实用log类实例
Jun 30 Python
Python书单 不将就
Jul 11 Python
numpy和pandas中数组的合并、拉直和重塑实例
Jun 28 Python
python程序文件扩展名知识点详解
Feb 27 Python
django 多数据库及分库实现方式
Apr 01 Python
pip安装tensorflow的坑的解决
Apr 19 Python
Numpy一维线性插值函数的用法
Apr 22 Python
opencv python 图片读取与显示图片窗口未响应问题的解决
Apr 24 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
Dec 27 Python
Python中else的三种使用场景
Jun 16 Python
python中的装饰器该如何使用
Jun 18 Python
python自动化操作之动态验证码、滑动验证码的降噪和识别
Aug 30 Python
python3通过udp实现组播数据的发送和接收操作
May 05 #Python
解决python使用list()时总是报错的问题
May 05 #Python
python requests.get带header
May 05 #Python
python中urllib.request和requests的使用及区别详解
May 05 #Python
python requests包的request()函数中的参数-params和data的区别介绍
May 05 #Python
关于Python解包知识点总结
May 05 #Python
python 使用事件对象asyncio.Event来同步协程的操作
May 04 #Python
You might like
PHP.MVC的模板标签系统(三)
2006/09/05 PHP
PHP概述.
2006/10/09 PHP
php长字符串定义方法
2012/07/12 PHP
php过滤所有的空白字符(空格、全角空格、换行等)
2015/10/27 PHP
php冒泡排序与快速排序实例详解
2015/12/07 PHP
PHP实现的二分查找算法实例分析
2017/12/19 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
2019/06/05 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
2019/10/18 PHP
用js实现的仿sohu博客更换页面风格(简单版)
2007/03/22 Javascript
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
2011/07/26 Javascript
BootStrap中的表单大全
2016/09/07 Javascript
json定义及jquery操作json的方法
2016/09/29 Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
2018/04/22 Javascript
如何基于原生javaScript生成带图片的二维码
2019/11/21 Javascript
[05:45]Ti4观战指南(下)
2014/07/07 DOTA
[02:51]2014DOTA2 TI小组赛总结中国军团全部进军钥匙球馆
2014/07/15 DOTA
python使用自定义user-agent抓取网页的方法
2015/04/15 Python
python判断图片宽度和高度后删除图片的方法
2015/05/22 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
Python read函数按字节(字符)读取文件的实现
2019/07/03 Python
Python递归实现打印多重列表代码
2020/02/27 Python
解决Python 异常TypeError: cannot concatenate 'str' and 'int' objects
2020/04/08 Python
python Canny边缘检测算法的实现
2020/04/24 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
2021/03/03 Python
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
餐厅考勤管理制度
2014/01/28 职场文书
酒店大堂副理的职责范文
2014/02/13 职场文书
《我的信念》教学反思
2014/02/15 职场文书
《有趣的发现》教学反思
2014/04/15 职场文书
《夹竹桃》教学反思
2014/04/20 职场文书
土地租赁意向书
2014/07/30 职场文书
初婚未育证明样本
2014/10/24 职场文书
2014年度个人工作总结
2014/11/07 职场文书
2014年文秘工作总结
2014/11/25 职场文书
2015年大学元旦晚会活动策划书
2014/12/09 职场文书
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
2022/04/24 Vue.js