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通过urllib2爬网页上种子下载示例
Feb 24 Python
Python语言实现获取主机名根据端口杀死进程
Mar 31 Python
Python 编码处理-str与Unicode的区别
Sep 06 Python
Python实现批量更换指定目录下文件扩展名的方法
Sep 19 Python
Python创建xml文件示例
Mar 22 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
May 24 Python
python实现简易通讯录修改版
Mar 13 Python
python实现反转部分单向链表
Sep 27 Python
Python设计模式之抽象工厂模式原理与用法详解
Jan 15 Python
python生成器推导式用法简单示例
Oct 08 Python
Python获取统计自己的qq群成员信息的方法
Nov 15 Python
Matlab如何实现矩阵复制扩充
Jun 02 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
Yii实现复选框批量操作实例代码
2017/03/15 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
JsEasy简介 JsEasy是什么?与下载
2007/03/07 Javascript
用js实现键盘方向键翻页功能的代码
2007/06/03 Javascript
国外Lightbox v2.03.3 最新版 下载
2007/10/17 Javascript
用jquery实现输入框获取焦点消失文字
2013/04/27 Javascript
jQuery简单实现彩色云标签效果示例
2016/08/01 Javascript
AngularJS实现ajax请求的方法
2016/11/22 Javascript
微信小程序 两种滑动方式(横向滑动,竖向滑动)详细及实例代码
2017/01/13 Javascript
form表单数据封装成json格式并提交给服务器的实现方法
2017/12/14 Javascript
详解基于mpvue的小程序markdown适配解决方案
2018/05/08 Javascript
JavaScript的级联函数用法简单示例【链式调用】
2019/03/26 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
2019/04/03 Javascript
通过Nodejs搭建网站简单实现注册登录流程
2019/06/14 NodeJs
python3+PyQt5实现自定义分数滑块部件
2018/04/24 Python
使用Flask集成bootstrap的方法
2018/07/24 Python
Python查找文件中包含中文的行方法
2018/12/19 Python
Python进阶之自定义对象实现切片功能
2019/01/07 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
2019/09/10 Python
python字符串替换re.sub()实例解析
2020/02/09 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
Crocs卡骆驰洞洞鞋日本官方网站:Crocs日本
2016/08/25 全球购物
销售所有的狗狗产品:Dog.com
2016/10/13 全球购物
Spartoo美国:欧洲排名第一的在线时装零售商
2019/12/12 全球购物
Vilebrequin美国官方网上商店:法国豪华泳装品牌
2020/02/22 全球购物
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
2013/07/26 面试题
英语专业学子个人的自我评价
2013/10/02 职场文书
《富饶的西沙群岛》教学反思
2014/04/09 职场文书
保护环境演讲稿
2014/05/10 职场文书
关于青春的演讲稿500字
2014/08/22 职场文书
母亲节寄语大全
2015/02/27 职场文书
2015年爱牙日活动总结
2015/03/23 职场文书
高校自主招生教师推荐信
2015/03/23 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers
GTX1660显卡搭配显示器推荐
2022/04/19 数码科技
python双向链表实例详解
2022/05/25 Python