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 isinstance判断对象类型
Sep 06 Python
Python两个整数相除得到浮点数值的方法
Mar 18 Python
Python输出汉字字库及将文字转换为图片的方法
Jun 04 Python
python跳过第一行快速读取文件内容的实例
Jul 12 Python
python将.ppm格式图片转换成.jpg格式文件的方法
Oct 27 Python
浅谈Pycharm中的Python Console与Terminal
Jan 17 Python
树莓派安装OpenCV3完整过程的实现
Oct 10 Python
Python使用qrcode二维码库生成二维码方法详解
Feb 17 Python
Django的ListView超详细用法(含分页paginate)
May 21 Python
Pycharm在指定目录下生成文件和删除文件的实现
Dec 28 Python
Matplotlib中rcParams使用方法
Jan 05 Python
python实现ROA算子边缘检测算法
Apr 05 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提取中文首字母
2008/04/09 PHP
解析php通过cookies获取远程网页的指定代码
2013/06/25 PHP
php简单生成一组与多组随机字符串的方法
2017/05/09 PHP
js 替换
2008/02/19 Javascript
JavaScript Event学习第五章 高级事件注册模型
2010/02/07 Javascript
说明你的Javascript技术很烂的五个原因
2011/04/26 Javascript
浅说js变量
2011/05/25 Javascript
使用命令对象代替switch语句的写法示例
2015/02/28 Javascript
JavaScript 经典实例日常收集整理(常用经典)
2016/03/30 Javascript
AngularJS轻松实现双击排序的功能
2016/08/30 Javascript
Vue.js每天必学之指令系统与自定义指令
2016/09/07 Javascript
js实现类bootstrap模态框动画
2017/02/07 Javascript
jQuery插件HighCharts实现气泡图效果示例【附demo源码】
2017/03/13 Javascript
AngularJS实现表单元素值绑定操作示例
2017/10/11 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
2019/09/02 Javascript
element实现合并单元格通用方法
2019/11/13 Javascript
vue+elementUI 实现内容区域高度自适应的示例
2020/09/26 Javascript
python中文乱码不着急,先看懂字节和字符
2017/12/20 Python
利用Python将文本中的中英文分离方法
2018/10/31 Python
pycharm + django跨域无提示的解决方法
2020/12/06 Python
CSS3实现曲线阴影和翘边阴影
2016/05/03 HTML / CSS
施华洛世奇美国官网:SWAROVSKI美国
2018/02/08 全球购物
生物制药毕业生自荐信
2013/10/16 职场文书
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
物流管理毕业生自荐信范文
2014/03/15 职场文书
领导干部廉政承诺书
2014/03/27 职场文书
施工安全责任书范本
2014/07/24 职场文书
行政专员岗位职责说明书
2014/09/01 职场文书
专业技术职务聘任证明
2015/03/02 职场文书
地心历险记观后感
2015/06/15 职场文书
签约仪式致辞
2015/07/30 职场文书
如何制定销售人员薪酬制度?
2019/07/09 职场文书
创业计划书之淘宝网店
2019/10/08 职场文书
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript
详解MySQL中的pid与socket
2021/06/15 MySQL
Django框架中模型的用法
2022/06/10 Python