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中的闭包详细介绍和实例
Nov 21 Python
Python中set与frozenset方法和区别详解
May 23 Python
Python 基础教程之包和类的用法
Feb 23 Python
5个很好的Python面试题问题答案及分析
Jan 19 Python
Python Paramiko模块的使用实际案例
Feb 01 Python
tensorflow建立一个简单的神经网络的方法
Feb 10 Python
Django项目后台不挂断运行的方法
Aug 31 Python
tensorflow2.0保存和恢复模型3种方法
Feb 03 Python
Django配置跨域并开发测试接口
Nov 04 Python
python里glob模块知识点总结
Jan 05 Python
pycharm debug 断点调试心得分享
Apr 16 Python
关于python中readlines函数的参数hint的相关知识总结
Jun 24 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
Dedecms V3.1 生成HTML速度的优化办法
2007/03/18 PHP
javascript 继承实现方法
2009/08/26 Javascript
javascript 在网页中的运用(asp.net)
2009/11/23 Javascript
js 火狐下取本地路径实现思路
2013/04/02 Javascript
用JavaScript实现类似于ListBox功能示例代码
2014/03/09 Javascript
jQuery选择器源码解读(七):elementMatcher函数
2015/03/31 Javascript
快速学习JavaScript的6个思维技巧
2015/10/13 Javascript
在windows上用nodejs搭建静态文件服务器的简单方法
2016/08/11 NodeJs
vue路由嵌套的SPA实现步骤
2017/11/06 Javascript
利用three.js画一个3D立体的正方体示例代码
2017/11/19 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
2019/08/07 Javascript
JavaScript实现拖拽功能
2020/02/11 Javascript
在vue-cli创建的项目中使用sass操作
2020/08/10 Javascript
精确查找PHP WEBSHELL木马的方法(1)
2011/04/12 Python
在Python的Flask框架中使用日期和时间的教程
2015/04/21 Python
Python制作爬虫抓取美女图
2016/01/20 Python
利用Python在一个文件的头部插入数据的实例
2018/05/02 Python
python sys.argv[]用法实例详解
2018/05/25 Python
解决Python3.5+OpenCV3.2读取图像的问题
2018/12/05 Python
pycharm修改界面主题颜色的方法
2019/01/17 Python
用Python PIL实现几个简单的图片特效
2019/01/18 Python
Python实现账号密码输错三次即锁定功能简单示例
2019/03/29 Python
python 生成器和迭代器的原理解析
2019/10/12 Python
python操作redis数据库的三种方法
2020/09/10 Python
html5文本内容_动力节点Java学院整理
2017/07/11 HTML / CSS
来自圣地亚哥的实惠太阳镜:Knockaround
2018/08/27 全球购物
Bibloo荷兰:女士、男士和儿童的服装、鞋子和配饰
2019/02/25 全球购物
Contém1g官网:巴西彩妆品牌
2020/01/17 全球购物
新闻编辑自荐信
2013/11/03 职场文书
酒店值班经理的工作职责范本
2014/02/18 职场文书
2014年中学生检讨书大全
2014/10/09 职场文书
2014年幼儿园教研工作总结
2014/12/04 职场文书
2015年度个人业务工作总结
2015/04/27 职场文书
初中美术教学反思
2016/02/17 职场文书
详解Django的MVT设计模式
2021/04/29 Python
Vue实现动态查询规则生成组件
2021/05/27 Vue.js