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深入学习之上下文管理器
Aug 31 Python
python利用MethodType绑定方法到类示例代码
Aug 27 Python
python shell根据ip获取主机名代码示例
Nov 25 Python
python实现C4.5决策树算法
Aug 29 Python
基于python实现高速视频传输程序
May 05 Python
Python谱减法语音降噪实例
Dec 18 Python
python海龟绘图之画国旗实例代码
Nov 11 Python
python调用百度API实现人脸识别
Nov 17 Python
Python爬虫之App爬虫视频下载的实现
Dec 08 Python
Python异常类型以及处理方法汇总
Jun 05 Python
Python os和os.path模块详情
Apr 02 Python
Python中requests库的用法详解
Jun 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中导出数据到excel时数字变为科学计数的解决方法
2013/02/03 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
php实现根据IP地址获取其所在省市的方法
2015/04/30 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
2015/07/03 PHP
PDO的安全处理与事物处理方法
2016/10/31 PHP
基于jquery的一行代码轻松实现拖动效果
2010/12/28 Javascript
php对mongodb的扩展(小试牛刀)
2012/11/11 Javascript
js常用自定义公共函数汇总
2014/01/15 Javascript
一个不错的字符串转码解码函数(自写)
2014/07/31 Javascript
js的touch事件的实际引用
2014/10/13 Javascript
jQuery中remove()方法用法实例
2014/12/25 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
2015/03/10 Javascript
浅谈JavaScript 数据属性和访问器属性
2016/09/01 Javascript
smartupload实现文件上传时获取表单数据(推荐)
2016/12/12 Javascript
BootStrap 弹出层代码
2017/02/09 Javascript
关于Node.js的events.EventEmitter用法介绍
2017/04/01 Javascript
常用的 JS 排序算法 整理版
2018/04/05 Javascript
微信小程序--特定区域滚动到顶部时固定的方法
2019/04/28 Javascript
微信小程序自定义头部导航栏和导航栏背景图片 navigationStyle问题
2019/07/26 Javascript
Python 正则表达式操作指南
2009/05/04 Python
python统计文本文件内单词数量的方法
2015/05/30 Python
python结合shell查询google关键词排名的实现代码
2016/02/27 Python
python先序遍历二叉树问题
2017/11/10 Python
python实现基于SVM手写数字识别功能
2020/05/27 Python
Python编程pygame模块实现移动的小车示例代码
2018/01/03 Python
Django CBV类的用法详解
2019/07/26 Python
Python利用pip安装tar.gz格式的离线资源包
2020/09/14 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
伦敦一家领先的精品零售商:IRIS Fashion
2019/05/24 全球购物
外贸销售员求职的自我评价
2013/11/23 职场文书
新员工试用期自我评价
2015/03/10 职场文书
2015年少先队活动总结
2015/03/25 职场文书
实验室安全管理制度
2015/08/05 职场文书
2016全国“质量月”活动标语口号
2015/12/26 职场文书
十个Python自动化常用操作,即拿即用
2021/05/10 Python
JVM的类加载器和双亲委派模式你了解吗
2022/03/13 Java/Android