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中的super用法详解
May 28 Python
python实现在字符串中查找子字符串的方法
Jul 11 Python
一个简单的python爬虫程序 爬取豆瓣热度Top100以内的电影信息
Apr 17 Python
解决csv.writer写入文件有多余的空行问题
Jul 06 Python
python实现在图片上画特定大小角度矩形框
Oct 24 Python
Python判断有效的数独算法示例
Feb 23 Python
Python后台开发Django会话控制的实现
Apr 15 Python
pyqt5使用按钮进行界面的跳转方法
Jun 19 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
Jan 13 Python
基于pandas向csv添加新的行和列
May 25 Python
python不到50行代码完成了多张excel合并的实现示例
May 28 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
Mar 03 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
15个小时----从修改程序到自己些程序
2006/10/09 PHP
smarty缓存用法分析
2014/12/16 PHP
PHP 前加at符合@的作用解析
2015/07/31 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
2016/04/25 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
2018/08/20 PHP
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
javascript中的作用域和上下文使用简要概述
2013/12/05 Javascript
jquery统计输入文字的个数并对其进行判断
2014/01/07 Javascript
Js实现网页键盘控制翻页的方法
2014/10/30 Javascript
jQuery中last()方法用法实例
2015/01/06 Javascript
JavaScript实现复制文章自动添加版权
2016/08/02 Javascript
浅析Javascript的自动分号插入(ASI)机制
2016/09/29 Javascript
详解ECharts使用心得总结
2016/12/06 Javascript
ES6中Math对象的部分扩展
2017/02/20 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
在Vue组件上动态添加和删除属性方法
2018/02/23 Javascript
vue全局自定义指令-元素拖拽的实现代码
2019/04/14 Javascript
layer.alert回调函数执行关闭弹窗的实例
2019/09/11 Javascript
jQuery弹框插件使用方法详解
2020/05/26 jQuery
[56:00]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第一局
2016/03/05 DOTA
[02:12]2019完美世界全国高校联赛(春季赛)报名开启
2019/03/01 DOTA
Python中使用Tkinter模块创建GUI程序实例
2015/01/14 Python
python http接口自动化脚本详解
2018/01/02 Python
Python复制Word内容并使用格式设字体与大小实例代码
2018/01/22 Python
Python SQLite3简介
2018/02/22 Python
python使用Paramiko模块实现远程文件拷贝
2019/04/30 Python
Django在Model保存前记录日志实例
2020/05/14 Python
比较一下entity bean和session bean
2013/12/27 面试题
计算机应用专业毕业生求职信
2013/10/24 职场文书
电子商务毕业生求职信
2013/11/10 职场文书
工作会议欢迎词
2014/01/16 职场文书
初中生操行评语大全
2014/04/24 职场文书
五四青年节优秀演讲稿范文
2014/05/28 职场文书
演讲开场白台词大全
2015/05/29 职场文书
初中生入团申请书范文(五篇)
2019/10/16 职场文书
关于PostgreSQL JSONB的匹配和交集问题
2021/09/14 PostgreSQL