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解析XML的几种常见方法的介绍
Apr 09 Python
Python中将字典转换为列表的方法
Sep 21 Python
在python 中实现运行多条shell命令
Jan 07 Python
如何使用python爬虫爬取要登陆的网站
Jul 12 Python
Python模拟登录之滑块验证码的破解(实例代码)
Nov 18 Python
在Python中利用pickle保存变量的实例
Dec 30 Python
Python函数默认参数常见问题及解决方案
Mar 26 Python
python手机号前7位归属地爬虫代码实例
Mar 31 Python
python函数中将变量名转换成字符串实例
May 11 Python
为什么说python适合写爬虫
Jun 11 Python
python 爬取B站原视频的实例代码
Sep 09 Python
Python 的 f-string 可以连接字符串与数字的原因解析
Feb 20 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/03/27 PHP
php 友好URL的实现(吐血推荐)
2008/10/04 PHP
PHP读取PDF内容配合Xpdf的使用
2012/11/24 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
2015/03/05 PHP
php无限级分类实现方法分析
2016/10/19 PHP
CI框架(CodeIgniter)实现的数据库增删改查操作总结
2018/05/23 PHP
Mootools 1.2教程 同时进行多个形变动画
2009/09/15 Javascript
Jquery 高亮显示文本中重要的关键字
2009/12/24 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
浅谈javascript事件取消和阻止冒泡
2015/05/26 Javascript
13个PHP函数超实用
2015/10/21 Javascript
微信小程序 wx.request(object) API详解及实例代码
2016/09/30 Javascript
angularjs 表单密码验证自定义指令实现代码
2016/10/27 Javascript
VueJS如何引入css或者less文件的一些坑
2017/04/25 Javascript
详解利用 Express 托管静态文件的方法
2017/09/18 Javascript
Vuex 入门教程
2018/01/10 Javascript
jQuery替换节点元素的操作方法
2018/03/18 jQuery
浅谈Vue中render中的h箭头函数
2019/11/07 Javascript
解决vue下载后台传过来的乱码流的问题
2020/12/05 Vue.js
[48:31]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第二场 12.17
2020/12/19 DOTA
Python工程师面试题 与Python基础语法相关
2016/01/14 Python
浅谈scrapy 的基本命令介绍
2017/06/13 Python
使用Python读取安卓手机的屏幕分辨率方法
2018/03/31 Python
Pandas统计重复的列里面的值方法
2019/01/30 Python
pyqt 实现在Widgets中显示图片和文字的方法
2019/06/13 Python
python+numpy按行求一个二维数组的最大值方法
2019/07/09 Python
浅谈Django中view对数据库的调用方法
2019/07/18 Python
TensorFlow 显存使用机制详解
2020/02/03 Python
python算的上脚本语言吗
2020/06/22 Python
python3.9实现pyinstaller打包python文件成exe
2020/12/13 Python
Java面试题:请说出如下代码的输出结果
2013/04/22 面试题
晚宴邀请函范文
2014/01/15 职场文书
遗嘱格式范本
2015/08/07 职场文书
中秋节作文(五年级)之关于月亮
2019/09/11 职场文书
基于CSS3画一个iPhone
2021/04/21 HTML / CSS
Mysql中where与on的区别及何时使用详析
2021/08/04 MySQL