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 条件判断的缩写方法
Sep 06 Python
Python使用urllib2获取网络资源实例讲解
Dec 02 Python
从零学python系列之教你如何根据图片生成字符画
May 23 Python
给Python中的MySQLdb模块添加超时功能的教程
May 05 Python
用Python计算三角函数之atan()方法的使用
May 15 Python
Pandas实现数据类型转换的一些小技巧汇总
May 07 Python
深入理解Python异常处理的哲学
Feb 01 Python
Python 的字典(Dict)是如何存储的
Jul 05 Python
Python sep参数使用方法详解
Feb 12 Python
Python生成随机验证码代码实例解析
Jun 09 Python
keras 使用Lambda 快速新建层 添加多个参数操作
Jun 10 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
Oct 27 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/08/18 PHP
php设计模式 Bridge (桥接模式)
2011/06/26 PHP
PHP快速推送微信模板消息
2017/04/14 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
2017/07/09 PHP
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
2010/05/25 Javascript
javascript基础第一章 JavaScript与用户端
2010/07/22 Javascript
jquery获取input的value问题说明
2010/08/19 Javascript
简单几行JS Code实现IE邮件转发新浪微博
2013/07/03 Javascript
js滑动提示效果代码分享
2016/03/10 Javascript
angularjs实现过滤并替换关键字小功能
2017/09/19 Javascript
微信小程序中使用echarts的实现方法
2019/04/24 Javascript
JS实现从对象获取对象中单个键值的方法示例
2019/06/05 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
[45:56]Ti4正赛第一天 VG vs NEWBEE 3
2014/07/19 DOTA
Python安装Imaging报错:The _imaging C module is not installed问题解决方法
2014/08/22 Python
Windows下实现Python2和Python3两个版共存的方法
2015/06/12 Python
Python实现的Excel文件读写类
2015/07/30 Python
python从入门到精通(DAY 2)
2015/12/20 Python
Python用户推荐系统曼哈顿算法实现完整代码
2017/12/01 Python
python 画二维、三维点之间的线段实现方法
2019/07/07 Python
python中使用np.delete()的实例方法
2021/02/01 Python
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
2019/01/17 HTML / CSS
HTML5之SVG 2D入门10—滤镜的定义及使用
2013/01/30 HTML / CSS
美国电子产品折扣网站:Daily Steals
2017/05/20 全球购物
俄罗斯的精英皮具:Wittchen
2018/01/29 全球购物
Mio Skincare法国官网:身体紧致及孕期身体护理
2018/04/04 全球购物
开发中都用到了那些设计模式?用在什么场合?
2014/08/21 面试题
学校后勤岗位职责
2014/02/19 职场文书
公司总经理岗位职责
2014/03/15 职场文书
经理秘书求职自荐信范文
2014/03/23 职场文书
村主任群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
个人四风问题对照检查材料思想汇报
2014/10/06 职场文书
主持人开幕词
2015/01/29 职场文书
大连导游词
2015/02/12 职场文书
2016年五一劳动节专题校园广播稿
2015/12/17 职场文书
golang 语言中错误处理机制
2021/08/30 Golang