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脚本实现下载合并SAE日志
Feb 10 Python
Python使用Scrapy爬取妹子图
May 28 Python
python实现备份目录的方法
Aug 03 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
Jan 21 Python
python图像常规操作
Nov 11 Python
python机器学习实战之K均值聚类
Dec 20 Python
Python安装pycurl失败的解决方法
Oct 15 Python
Django中使用Celery的方法示例
Nov 29 Python
python实现统计文本中单词出现的频率详解
May 20 Python
python隐藏终端执行cmd命令的方法
Jun 24 Python
Kmeans均值聚类算法原理以及Python如何实现
Sep 26 Python
scrapy-splash简单使用详解
Feb 21 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加密解密的代码
2006/10/09 PHP
php实现的zip文件内容比较类
2014/09/24 PHP
PHP SOCKET编程详解
2015/05/22 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
js向上无缝滚动,网站公告效果 具体代码
2013/11/18 Javascript
解决JQeury显示内容没有边距内容紧挨着浏览器边线
2013/12/20 Javascript
js实现在网页上简单显示时间的方法
2015/03/02 Javascript
.NET微信公众号开发之创建自定义菜单
2015/07/16 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
2016/05/13 Javascript
原生JS实现几个常用DOM操作API实例
2017/01/19 Javascript
深入理解vue-router之keep-alive
2017/08/31 Javascript
如何将百度地图包装成Vue的组件的方法步骤
2019/02/12 Javascript
socket在egg中的使用实例代码详解
2019/05/30 Javascript
微信小程序吸底区域适配iPhoneX的实现
2020/04/09 Javascript
python编程使用selenium模拟登陆淘宝实例代码
2018/01/25 Python
python爬虫之urllib库常用方法用法总结大全
2018/11/14 Python
Python完成哈夫曼树编码过程及原理详解
2019/07/29 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
python时间time模块处理大全
2020/10/25 Python
美国户外运动商店:Sun & Ski
2018/08/23 全球购物
西班牙最好的在线购买葡萄酒的商店:Vinoseleccion
2019/10/30 全球购物
澳大利亚领先的在线药房:Pharmacy Online(有中文站)
2020/02/22 全球购物
公司员工检讨书
2014/02/08 职场文书
2014年党务公开实施方案
2014/02/27 职场文书
搞笑爱情保证书
2014/04/29 职场文书
企业安全生产演讲稿
2014/05/09 职场文书
演讲稿开场白台词
2014/08/25 职场文书
创先争优活动心得体会
2014/09/04 职场文书
房地产营销活动策划方案
2014/09/15 职场文书
祖国在我心中演讲稿(小学生)
2014/09/23 职场文书
群众路线党员个人整改措施
2014/10/27 职场文书
2015年小学语文工作总结
2015/05/25 职场文书
Java中PriorityQueue实现最小堆和最大堆的用法
2021/06/27 Java/Android
关于pytest结合csv模块实现csv格式的数据驱动问题
2022/05/30 Python
Spring Boot 的创建和运行示例代码详解
2022/07/23 Java/Android