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实现ipsec开权限实例
Nov 11 Python
python中实现k-means聚类算法详解
Nov 11 Python
python列表生成式与列表生成器的使用
Feb 23 Python
Python3.6笔记之将程序运行结果输出到文件的方法
Apr 22 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
Jun 14 Python
Python实现快速计算词频功能示例
Jun 25 Python
Python+OpenCv制作证件图片生成器的操作方法
Aug 21 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
Nov 26 Python
python安装和pycharm环境搭建设置方法
May 27 Python
在Keras中CNN联合LSTM进行分类实例
Jun 29 Python
Python 实现 T00ls 自动签到脚本代码(邮件+钉钉通知)
Jul 06 Python
最简单的matplotlib安装教程(小白)
Jul 28 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
拼音码表的生成
2006/10/09 PHP
php 来访国内外IP判断代码并实现页面跳转
2009/12/18 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
2016/01/07 PHP
PHP中单例模式与工厂模式详解
2017/02/17 PHP
php+js实现点赞功能的示例详解
2020/08/07 PHP
jquery 经典动画菜单效果代码
2010/01/26 Javascript
JQuery结合CSS操作打印样式的方法
2013/12/24 Javascript
js实现无缝循环滚动
2020/06/23 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
2016/10/24 Javascript
JQuery Dialog对话框 不能通过Esc关闭的原因分析及解决办法
2017/01/18 Javascript
jQuery事件详解
2017/02/23 Javascript
nodejs批量下载图片的实现方法
2017/05/19 NodeJs
angular1配合gulp和bower的使用教程
2018/01/19 Javascript
node.js 微信开发之定时获取access_token
2020/02/07 Javascript
vue 动态组件用法示例小结
2020/03/06 Javascript
微信小程序上传帖子的实例代码(含有文字图片的微信验证)
2020/07/11 Javascript
vue radio单选框,获取当前项(每一项)的value值操作
2020/09/10 Javascript
javascript中闭包closure的深入讲解
2021/03/03 Javascript
Python标准库与第三方库详解
2014/07/22 Python
Python中尝试多线程编程的一个简明例子
2015/04/07 Python
Python定时执行之Timer用法示例
2015/05/27 Python
python爬虫获取淘宝天猫商品详细参数
2020/06/23 Python
python pandas 对series和dataframe的重置索引reindex方法
2018/06/07 Python
python3实现用turtle模块画一棵随机樱花树
2019/11/21 Python
tensorflow 限制显存大小的实现
2020/02/03 Python
pytorch 使用加载训练好的模型做inference
2020/02/20 Python
如何利用python进行时间序列分析
2020/08/04 Python
pycharm Tab键设置成4个空格的操作
2021/02/26 Python
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
Armor Lux法国官方网站:水手服装、成衣和内衣
2020/05/26 全球购物
阿迪达斯中国官网:Adidas中国
2020/12/14 全球购物
初中校园广播稿
2014/02/02 职场文书
工商管理专业毕业生自我鉴定2014
2014/10/04 职场文书
教师作风建设剖析材料
2014/10/11 职场文书
2014大学辅导员工作总结
2014/12/02 职场文书
2015年精神文明建设工作总结
2015/04/21 职场文书