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 文件操作实现代码
Oct 07 Python
python实现文件路径和url相互转换的方法
Jul 06 Python
Python设计模式之命令模式简单示例
Jan 10 Python
python的常用模块之collections模块详解
Dec 06 Python
基于Python实现签到脚本过程解析
Oct 25 Python
Python命名空间namespace及作用域原理解析
Jun 05 Python
Python加速程序运行的方法
Jul 29 Python
python合并多个excel文件的示例
Sep 23 Python
linux mint中搜狗输入法导致pycharm卡死的问题
Oct 28 Python
pycharm 实现光标快速移动到括号外或行尾的操作
Feb 05 Python
拒绝盗图!教你怎么用python给图片加水印
Jun 04 Python
详解如何用Python实现感知器算法
Jun 18 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
环境会对咖啡种植有什么影响
2021/03/03 咖啡文化
Windows PHP5和Apache的安装与配置
2009/06/08 PHP
一个PHP针对数字的加密解密类
2014/03/20 PHP
php set_include_path函数设置 include_path 配置选项
2016/10/30 PHP
Javascript 的addEventListener()及attachEvent()区别分析
2009/05/21 Javascript
js操作textarea 常用方法总结
2012/12/03 Javascript
解决Jquery load()加载GB2312页面时出现乱码的两种方案
2013/09/10 Javascript
JavaScript伸缩的菜单简单示例
2013/12/03 Javascript
js 鼠标移动显示图片的简单实例
2013/12/25 Javascript
JQuery动画animate的stop方法使用详解
2014/05/09 Javascript
input标签内容改变的触发事件介绍
2014/06/18 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
2016/02/18 Javascript
开启BootStrap学习之旅
2016/05/04 Javascript
AngularJs基本特性解析(一)
2016/07/21 Javascript
Vue.js组件tabs实现选项卡切换效果
2016/12/01 Javascript
vue自定义指令的创建和使用方法实例分析
2018/12/04 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
mpvue 页面预加载新增preLoad生命周期的两种方式
2019/10/17 Javascript
Vue封装Axios请求和拦截器的步骤
2020/09/16 Javascript
vue中实现点击变成全屏的多种方法
2020/09/27 Javascript
[02:27]2018DOTA2亚洲邀请赛赛前采访-OpTic
2018/04/03 DOTA
用实例说明python的*args和**kwargs用法
2013/11/01 Python
python实现的二叉树定义与遍历算法实例
2017/06/30 Python
Django框架 querySet功能解析
2019/09/04 Python
python 协程中的迭代器,生成器原理及应用实例详解
2019/10/28 Python
python利用文件时间批量重命名照片和视频
2021/02/09 Python
Python的Tqdm模块实现进度条配置
2021/02/24 Python
屈臣氏官方旗舰店:亚洲享负盛名的保健及美妆零售商
2019/03/15 全球购物
婚前协议书
2014/04/15 职场文书
大型营销活动计划书
2014/04/28 职场文书
干部年终考核评语
2015/01/04 职场文书
世界遗产的导游词
2015/02/13 职场文书
城管个人总结
2015/02/28 职场文书
《比尾巴》教学反思
2016/02/24 职场文书
掌握一个领域知识,高效学习必备方法
2019/08/08 职场文书
服务器间如何实现文件共享
2022/05/20 Servers