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中for循环详解
Jan 17 Python
详细解读Python中解析XML数据的方法
Oct 15 Python
Python探索之爬取电商售卖信息代码示例
Oct 27 Python
Python复制Word内容并使用格式设字体与大小实例代码
Jan 22 Python
python如何把嵌套列表转变成普通列表
Mar 20 Python
python 将列表中的字符串连接成一个长路径的方法
Oct 23 Python
Linux下Python安装完成后使用pip命令的详细教程
Nov 22 Python
对python中大文件的导入与导出方法详解
Dec 28 Python
Python整数与Numpy数据溢出问题解决
Sep 11 Python
python代码打印100-999之间的回文数示例
Nov 24 Python
使用keras和tensorflow保存为可部署的pb格式
May 25 Python
django中websocket的具体使用
Jan 22 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免费发送定时短信的实例
2016/10/24 PHP
php 函数中静态变量使用的问题实例分析
2020/03/05 PHP
CL vs ForZe BO5 第一场 2.13
2021/03/10 DOTA
二级域名或跨域共享Cookies的实现方法
2008/08/07 Javascript
扩展JavaScript功能的正确方法(译文)
2012/04/12 Javascript
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
2013/10/17 Javascript
JavaScript获取多个数组的交集简单实例
2013/11/11 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
2014/06/24 Javascript
js操作滚动条事件实例
2015/01/29 Javascript
利用JQuery实现datatables插件的增加和删除行功能
2017/01/06 Javascript
js数组与字符串常用方法总结
2017/01/13 Javascript
vue中element-ui表格缩略图悬浮放大功能的实例代码
2018/06/26 Javascript
使用JS实现导航切换时高亮显示的示例讲解
2018/08/22 Javascript
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
2018/10/26 Javascript
python在Windows8下获取本机ip地址的方法
2015/03/14 Python
用Python的Django框架完成视频处理任务的教程
2015/04/02 Python
Python 制作糗事百科爬虫实例
2016/09/22 Python
Python随机数用法实例详解【基于random模块】
2017/04/18 Python
Python编程生成随机用户名及密码的方法示例
2017/05/05 Python
Python工厂函数用法实例分析
2018/05/14 Python
python日志logging模块使用方法分析
2019/05/23 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
2019/07/09 Python
Python Web项目Cherrypy使用方法镜像
2020/11/05 Python
奥地利领先的在线药房:SHOP APOTHEKE
2019/10/07 全球购物
俄罗斯天然和有机产品、健康生活网上商店:Fitomarket.ru
2020/10/09 全球购物
英国Lookfantastic中文网站:护肤品美妆美发购物(英国直邮)
2020/04/27 全球购物
机电一体化大学生求职信
2013/11/08 职场文书
公司前台接待岗位职责
2013/12/03 职场文书
初中生物教学反思
2014/01/10 职场文书
机关党员2014全国两会学习心得体会
2014/03/10 职场文书
学习型家庭事迹材料
2014/12/20 职场文书
车间主任岗位职责范本
2015/04/08 职场文书
2015年征兵工作总结
2015/07/23 职场文书
孙振耀退休感言
2015/08/01 职场文书
浅谈Python协程asyncio
2021/06/20 Python
Oracle配置dblink访问PostgreSQL的操作方法
2022/03/21 PostgreSQL