python TCP包注入方式


Posted in Python onMay 05, 2020

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

#! /usr/bin/env python
import socket
import struct
 
def checksum(data):
 s = 0
 n = len(data) % 2
 for i in range(0, len(data)-n, 2):
  s+= ord(data[i]) + (ord(data[i+1]) << 8)
 if n:
  s+= ord(data[i+1])
 while (s >> 16):
  s = (s & 0xFFFF) + (s >> 16)
 s = ~s & 0xffff
 return s
 
class ip():
 
 def __init__(self, source, destination):
  self.version = 4
  self.ihl = 5 # Internet Header Length
  self.tos = 0 # Type of Service
  self.tl = 0 # total length will be filled by kernel
  self.id = 54321
  self.flags = 0 # More fragments
  self.offset = 0
  self.ttl = 255
  self.protocol = socket.IPPROTO_TCP
  self.checksum = 0 # will be filled by kernel
  self.source = socket.inet_aton(source)
  self.destination = socket.inet_aton(destination)
 
 def pack(self):
  ver_ihl = (self.version << 4) + self.ihl
  flags_offset = (self.flags << 13) + self.offset
  ip_header = struct.pack("!BBHHHBBH4s4s",
     ver_ihl,
     self.tos,
     self.tl,
     self.id,
     flags_offset,
     self.ttl,
     self.protocol,
     self.checksum,
     self.source,
     self.destination)
  return ip_header
 
class tcp():
 
 def __init__(self, srcp, dstp):
  self.srcp = srcp
  self.dstp = dstp
  self.seqn = 0
  self.ackn = 0
  self.offset = 5 # Data offset: 5x4 = 20 bytes
  self.reserved = 0
  self.urg = 0
  self.ack = 0
  self.psh = 1
  self.rst = 0
  self.syn = 0
  self.fin = 0
  self.window = socket.htons(5840)
  self.checksum = 0
  self.urgp = 0
  self.payload = ""
 
 def pack(self, source, destination):
  data_offset = (self.offset << 4) + 0
  flags = self.fin + (self.syn << 1) + (self.rst << 2) + (self.psh << 3) + (self.ack << 4) + (self.urg << 5)
  tcp_header = struct.pack("!HHLLBBHHH",
      self.srcp,
      self.dstp,
      self.seqn,
      self.ackn,
      data_offset,
      flags, 
      self.window,
      self.checksum,
      self.urgp)
  #pseudo header fields
  source_ip = source
  destination_ip = destination
  reserved = 0
  protocol = socket.IPPROTO_TCP
  total_length = len(tcp_header) + len(self.payload)
  # Pseudo header
  psh = struct.pack("!4s4sBBH",
    source_ip,
    destination_ip,
    reserved,
    protocol,
    total_length)
  psh = psh + tcp_header + self.payload
  tcp_checksum = checksum(psh)
  tcp_header = struct.pack("!HHLLBBH",
     self.srcp,
     self.dstp,
     self.seqn,
     self.ackn,
     data_offset,
     flags,
     self.window)
  tcp_header+= struct.pack("H", tcp_checksum) + struct.pack("!H", self.urgp)
  return tcp_header
 
def test(source,site,data):
	s = socket.socket(socket.AF_INET,
     socket.SOCK_RAW,
     socket.IPPROTO_RAW)
	src_host=source
	dest_host=socket.gethostbyname(site)
	# IP Header
	ipobj=ip(src_host,dest_host)
	iph=ipobj.pack()
	# TCP Header
	tcpobj=tcp(1234,80)
	tcpobj.data_length=len(data)
	tcph=tcpobj.pack(ipobj.source,ipobj.destination)
	# Injection
	packet=iph+tcph+data
	s.sendto(packet,(dest_host,80))
	s.close()
 
if __name__ == '__main__':
	test("10.0.0.1","www.baidu.com","ITS TEST")

补充知识:python3 socket抓包

看代码吧!

import socket
s=socket.socket(socket.AF_INET,socket.SOCK_RAW,socket.IPPROTO_TCP)
while True:
print(s.recvfrom(65565))

以上这篇python TCP包注入方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python标准异常和异常处理详解
Feb 02 Python
解决python3在anaconda下安装caffe失败的问题
Jun 15 Python
关于Python中空格字符串处理的技巧总结
Aug 10 Python
Python实现的个人所得税计算器示例
Jun 01 Python
详解Python安装scrapy的正确姿势
Jun 26 Python
Python合并多个Excel数据的方法
Jul 16 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
Dec 22 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
Jan 22 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
Feb 21 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
Apr 17 Python
Anaconda之conda常用命令介绍(安装、更新、删除)
Oct 06 Python
python爬虫请求库httpx和parsel解析库的使用测评
May 10 Python
python构造IP报文实例
May 05 #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
You might like
利用php+mysql来做一个功能强大的在线计算器
2010/10/12 PHP
php反射学习之不用new方法实例化类操作示例
2019/06/14 PHP
新闻内页-JS分页
2006/06/07 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
JS判断输入字符串长度实例代码(汉字算两个字符,字母数字算一个)
2016/08/02 Javascript
深入浅析search 搜索框的写法
2016/08/02 Javascript
彻底学会Angular.js中的transclusion
2017/03/12 Javascript
AngularJS路由删除#符号解决的办法
2017/09/28 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
[02:23]2016国际邀请赛中国区预选赛wings晋级之路
2016/06/29 DOTA
Python读写配置文件的方法
2015/06/03 Python
python操作redis的方法
2015/07/07 Python
浅析Python编写函数装饰器
2016/03/18 Python
快速实现基于Python的微信聊天机器人示例代码
2017/03/03 Python
Python Flask-web表单使用详解
2017/11/18 Python
Python不使用int()函数把字符串转换为数字的方法
2018/07/09 Python
对python读取CT医学图像的实例详解
2019/01/24 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
2019/04/09 Python
基于python if 判断选择结构的实例详解
2019/05/06 Python
Python 从subprocess运行的子进程中实时获取输出的例子
2019/08/14 Python
python实现微信小程序用户登录、模板推送
2019/08/28 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
2020/02/10 Python
Python通过两个dataframe用for循环求笛卡尔积
2020/04/29 Python
python 实现简易的记事本
2020/11/30 Python
英国领先的鞋类零售商和顶级品牌的官方零售商:Wynsors
2020/02/17 全球购物
简述数组与指针的区别
2014/01/02 面试题
中文专业毕业生自荐信
2013/10/28 职场文书
霸王洗发水广告词
2014/03/14 职场文书
新年联欢会主持词
2014/03/27 职场文书
小学毕业典礼主持词
2014/03/27 职场文书
高一学生评语大全
2014/04/25 职场文书
2014校长四风问题对照检查材料思想汇报
2014/09/16 职场文书
2014年驻村干部工作总结
2014/11/17 职场文书
2014年政工师工作总结
2014/12/18 职场文书
解决Vue+SpringBoot+Shiro跨域问题
2021/06/09 Vue.js