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使用三角迭代计算圆周率PI的方法
Mar 20 Python
Python实现的中国剩余定理算法示例
Aug 05 Python
django框架自定义用户表操作示例
Aug 07 Python
使用Python开发SQLite代理服务器的方法
Dec 07 Python
在PYQT5中QscrollArea(滚动条)的使用方法
Jun 14 Python
python 杀死自身进程的实现方法
Jul 01 Python
通过python实现随机交换礼物程序详解
Jul 10 Python
Django封装交互接口代码
Jul 12 Python
python 浮点数四舍五入需要注意的地方
Aug 18 Python
Python爬虫如何破解JS加密的Cookie
Nov 19 Python
Django项目在pycharm新建的步骤方法
Mar 02 Python
如何用 Python 子进程关闭 Excel 自动化中的弹窗
May 07 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代码中使用换行及(\n或\r\n和br)的应用
2013/02/02 PHP
使用PHP遍历文件目录与清除目录中文件的实现详解
2013/06/24 PHP
Zend studio文件注释模板设置方法
2013/09/29 PHP
PHP对象相互引用的内存溢出实例分析
2014/08/28 PHP
PHP获取QQ达人QQ信息的方法
2015/03/05 PHP
PHP设计模式之装饰器模式定义与用法简单示例
2018/08/13 PHP
php curl操作API接口类完整示例
2019/05/21 PHP
PHP扩展安装方法步骤解析
2020/11/24 PHP
javascript 中对象的继承〔转贴〕
2007/01/22 Javascript
extjs4 treepanel动态改变行高度示例
2013/12/17 Javascript
jQuery中append()方法用法实例
2015/01/08 Javascript
JS实现带关闭功能的阿里妈妈网站顶部滑出banner工具条代码
2015/09/17 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
JS控制层作圆周运动的方法
2016/06/20 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
JS及JQuery对Html内容编码,Html转义
2017/02/17 Javascript
js+canvas实现动态吃豆人效果
2017/03/22 Javascript
jQuery回调方法使用示例
2017/06/26 jQuery
详解Angular2学习笔记之Html属性绑定
2018/01/03 Javascript
微信小程序使用map组件实现获取定位城市天气或者指定城市天气数据功能
2019/01/22 Javascript
浅析Vue下的components模板使用及应用
2019/11/27 Javascript
vue图片上传组件使用详解
2019/12/23 Javascript
使用Python编写简单的端口扫描器的实例分享
2015/12/18 Python
Python内建数据结构详解
2016/02/03 Python
python二进制文件的转译详解
2019/07/03 Python
Python第三方库的几种安装方式(小结)
2020/04/03 Python
Python发送邮件实现基础解析
2020/08/14 Python
CSS3的一个简单导航栏实现
2015/08/03 HTML / CSS
越南母婴用品购物网站:Kids Plaza
2020/04/09 全球购物
DataList 能否分页,请问如何实现?
2015/05/03 面试题
JSP&Servlet技术面试题
2015/05/21 面试题
计算机应用应届生求职信
2014/07/12 职场文书
秋季运动会广播稿(30篇)
2014/09/13 职场文书
2014年党的群众路线整改措施思想汇报
2014/10/12 职场文书
幼儿园圣诞节活动总结
2015/05/06 职场文书
导游词之清晏园
2019/11/22 职场文书