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 相关文章推荐
wxpython学习笔记(推荐查看)
Jun 09 Python
使用python实现省市三级菜单效果
Jan 20 Python
Python3利用SMTP协议发送E-mail电子邮件的方法
Sep 30 Python
python中numpy的矩阵、多维数组的用法
Feb 05 Python
python网络爬虫学习笔记(1)
Apr 09 Python
python调用百度地图WEB服务API获取地点对应坐标值
Jan 16 Python
python3中的eval和exec的区别与联系
Oct 10 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
Dec 12 Python
Python读取文件内容为字符串的方法(多种方法详解)
Mar 04 Python
opencv-python的RGB与BGR互转方式
Jun 02 Python
python3代码输出嵌套式对象实例详解
Dec 03 Python
Pandas中DataFrame交换列顺序的方法实现
Dec 14 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设计模式之装饰者模式
2012/02/29 PHP
yii实现CheckBox复选框在同一行显示的方法
2014/12/03 PHP
php匹配字符中链接地址的方法
2014/12/22 PHP
理解php依赖注入和控制反转
2016/05/11 PHP
PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例
2017/06/07 PHP
laravel高级的Join语法详解以及使用Join多个条件
2019/10/16 PHP
Yii框架组件的事件机制原理与用法分析
2020/04/07 PHP
jquery 的 $(&quot;#id&quot;).html() 无内容的解决方法
2010/06/07 Javascript
JQUERY dialog的用法详细解析
2013/12/19 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
2015/11/16 Javascript
详解Node.js如何开发命令行工具
2016/08/14 Javascript
jQuery实现底部浮动窗口效果
2016/09/07 Javascript
Vue.js 2.5新特性介绍(推荐)
2017/10/24 Javascript
JavaScript实现重力下落与弹性效果的方法分析
2017/12/20 Javascript
vue项目webpack中Npm传递参数配置不同域名接口
2018/06/15 Javascript
vue-cli3.0使用及部分配置详解
2018/08/29 Javascript
python 自动化将markdown文件转成html文件的方法
2016/09/23 Python
python实现requests发送/上传多个文件的示例
2018/06/04 Python
详解python里的命名规范
2018/07/16 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
2019/06/27 Python
cProfile Python性能分析工具使用详解
2019/07/22 Python
python2爬取百度贴吧指定关键字和图片代码实例
2019/08/14 Python
TENSORFLOW变量作用域(VARIABLE SCOPE)
2020/01/10 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
2020/04/27 Python
详解python对象之间的交互
2020/09/29 Python
Selenium 配置启动项参数的方法
2020/12/04 Python
意大利奢侈品网站:Italist
2016/08/23 全球购物
美国彩妆品牌:Coastal Scents
2017/04/01 全球购物
爱尔兰领先的在线体育用品零售商:theGAAstore
2018/04/16 全球购物
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
Michael Kors英国官网:美国奢侈品品牌
2019/11/13 全球购物
主题酒店策划书
2014/01/28 职场文书
养成教育经验材料
2014/05/26 职场文书
大学生党员个人剖析材料
2014/10/08 职场文书
小学英语教师研修感悟
2015/11/18 职场文书
Golang jwt身份认证
2022/04/20 Golang