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中查找excel某一列的重复数据 剔除之后打印
Feb 10 Python
python通过scapy获取局域网所有主机mac地址示例
May 04 Python
Python语言描述随机梯度下降法
Jan 04 Python
win7下python3.6安装配置方法图文教程
Jul 31 Python
Python中的 sort 和 sorted的用法与区别
Aug 10 Python
python银行系统实现源码
Oct 25 Python
Python tkinter三种布局实例详解
Jan 06 Python
在Tensorflow中查看权重的实现
Jan 24 Python
解决tensorboard多个events文件显示紊乱的问题
Feb 15 Python
python 实现Harris角点检测算法
Dec 11 Python
Python3中最常用的5种线程锁实例总结
Jul 07 Python
Python使用psutil库对系统数据进行采集监控的方法
Aug 23 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的内置函数,通过DES算法对数据加密和解密
2012/06/21 PHP
PHP大转盘中奖概率算法实例
2014/10/21 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
2019/08/30 PHP
超越Jquery_01_isPlainObject分析与重构
2010/10/20 Javascript
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
轻松创建nodejs服务器(4):路由
2014/12/18 NodeJs
javascript点击按钮实现隐藏显示切换效果
2016/02/03 Javascript
AngularJS中的DOM操作用法分析
2016/11/04 Javascript
vue中$refs的用法及作用详解
2018/04/24 Javascript
关于AOP在JS中的实现与应用详解
2019/05/06 Javascript
[01:11:48]Fnatic vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python基础教程之常用运算符
2014/08/29 Python
python通过函数属性实现全局变量的方法
2015/05/16 Python
Python中用altzone()方法处理时区的教程
2015/05/22 Python
Python+matplotlib实现华丽的文本框演示代码
2018/01/22 Python
Django 路由控制的实现
2019/07/17 Python
对Django外键关系的描述
2019/07/26 Python
python求平均数、方差、中位数的例子
2019/08/22 Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
2020/01/20 Python
利用Python脚本实现自动刷网课
2020/02/03 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
2020/02/23 Python
Jupyter Notebook的连接密码 token查询方式
2020/04/21 Python
CSS教程:CSS3圆角属性
2009/04/02 HTML / CSS
用纯css3和html制作泡沫对话框实现代码
2013/03/21 HTML / CSS
Css3新特性应用之形状总结
2016/12/08 HTML / CSS
内科护士实习自我鉴定
2013/10/17 职场文书
英语商务邀请函范文
2014/01/16 职场文书
企业文化理念标语
2014/06/10 职场文书
七一讲话心得体会
2014/09/05 职场文书
预备党员思想汇报1000字
2014/10/07 职场文书
2014年司法局工作总结
2014/12/11 职场文书
酒店前台岗位职责
2015/04/16 职场文书
2015年领班工作总结
2015/04/29 职场文书
离婚财产分割协议书
2015/08/11 职场文书
感恩老师主题班会
2015/08/12 职场文书
Spring Boot 的创建和运行示例代码详解
2022/07/23 Java/Android