Python原始套接字编程实例解析


Posted in Python onJanuary 29, 2020

这篇文章主要介绍了Python原始套接字编程实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

在实验中需要自己构造单独的HTTP数据报文,而使用SOCK_STREAM进行发送数据包,需要进行完整的TCP交互。

因此想使用原始套接字进行编程,直接构造数据包,并在IP层进行发送,即采用SOCK_RAW进行数据发送。

使用SOCK_RAW的优势是,可以对数据包进行完整的修改,可以处理IP层上的所有数据包,对各字段进行修改,而不受UDP和TCP的限制。

下面开始构造HTTP数据包,

IP层和TCP层使用python的Impacket库,http内容自行填写。

#!/usr/bin/env python
 
#-------------------------------------------------------------------------------
# Name:   raw_http.py
# Purpose:    construct a raw http get packet
#
# Author:  Yangjun
#
# Created:    08/02/2014
# Copyright:  (c) Yangjun 2014
# Licence:    <your licence>
#-------------------------------------------------------------------------------
 
import sys
import socket
from impacket import ImpactDecoder, ImpactPacket
 
def main():
 
  if len(sys.argv) < 3:
    print "Use: %s <src ip> <dst ip>" % sys.argv[0]
    print "Use: %s <src ip> <dst ip> <cnt>" % sys.argv[0]
    sys.exit(1)
  elif len(sys.argv) == 3:
    src = sys.argv[1]
    dst = sys.argv[2]
    cnt = 1
  elif len(sys.argv) ==4:
    src = sys.argv[1]
    dst = sys.argv[2]
    cnt = sys.argv[3]
  else:
    print "Input error!"
    sys.exit(1)
#print src, dst
  ip = ImpactPacket.IP()
  ip.set_ip_src(src)
  ip.set_ip_dst(dst)
 
  # Create a new ICMP packet of type ECHO.
  icmp = ImpactPacket.ICMP()
  tcp = ImpactPacket.TCP()
  tcp.set_th_sport(55968)
  tcp.set_th_dport(80)
  tcp.set_th_seq(1)
  tcp.set_th_ack(1)
  tcp.set_th_flags(0x18)
  tcp.set_th_win(64)
 
  tcp.contains( ImpactPacket.Data("GET /att/DIYLife/41264/528 HTTP/1.1\r\nHost: 192.168.111.1\r\nAccept-Encoding: identity\r\n\r\n"))
 
  ip.contains(tcp)
 
  # Open a raw socket. Special permissions are usually required.
  s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
  s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
  seq_id = 0
  while cnt >= 1:
    # Calculate its checksum.
    seq_id = seq_id + 1
    tcp.set_th_seq(seq_id)
    tcp.calculate_checksum()
 
    # Send it to the target host.
    s.sendto(ip.get_packet(), (dst,80))
    cnt= cnt -1
 
if __name__ == '__main__':
  main()

运行后抓包如下:

Python原始套接字编程实例解析

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 远程统计文件代码分享
May 14 Python
windows下Python实现将pdf文件转化为png格式图片的方法
Jul 21 Python
基于python内置函数与匿名函数详解
Jan 09 Python
Python程序员面试题 你必须提前准备!(答案及解析)
Jan 23 Python
python操作oracle的完整教程分享
Jan 30 Python
flask session组件的使用示例
Dec 25 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
Aug 07 Python
Python 词典(Dict) 加载与保存示例
Dec 06 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
Jan 16 Python
pytorch 使用加载训练好的模型做inference
Feb 20 Python
python利用百度云接口实现车牌识别的示例
Feb 21 Python
总结几个非常实用的Python库
Jun 26 Python
Python内置类型性能分析过程实例
Jan 29 #Python
python add_argument()用法解析
Jan 29 #Python
python使用ctypes调用扩展模块的实例方法
Jan 28 #Python
Python 时间戳之获取整点凌晨时间戳的操作方法
Jan 28 #Python
使用Python制作新型冠状病毒实时疫情图
Jan 28 #Python
代码总结Python2 和 Python3 字符串的区别
Jan 28 #Python
使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解
Jan 25 #Python
You might like
Windows下利用Gvim写PHP产生中文乱码问题解决方法
2011/04/20 PHP
微博短链接算法php版本实现代码
2012/09/15 PHP
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
2013/04/26 PHP
PHP CURL 多线程操作代码实例
2015/05/13 PHP
smarty模板判断数组为空的方法
2015/06/10 PHP
php metaphone()函数的定义和用法
2016/05/15 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
2016/06/13 PHP
php基于session锁防止阻塞请求的方法分析
2017/08/07 PHP
javascript引用对象的方法
2007/01/11 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
JS 拦截全局ajax请求实例解析
2016/11/29 Javascript
react性能优化达到最大化的方法 immutable.js使用的必要性
2017/03/09 Javascript
Centos6.8下Node.js安装教程
2017/05/12 Javascript
Vue DevTools调试工具的使用
2017/12/05 Javascript
react学习笔记之state以及setState的使用
2017/12/07 Javascript
关闭Vue计算属性自带的缓存功能方法
2018/03/02 Javascript
js实现移动端轮播图
2020/12/21 Javascript
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
vue-router之解决addRoutes使用遇到的坑
2020/07/19 Javascript
vue npm install 安装某个指定的版本操作
2020/08/11 Javascript
typescript配置alias的详细步骤
2020/08/12 Javascript
归纳整理Python中的控制流语句的知识点
2015/04/14 Python
用于统计项目中代码总行数的Python脚本分享
2015/04/21 Python
Python爬取网易云音乐上评论火爆的歌曲
2017/01/19 Python
pandas 两列时间相减换算为秒的方法
2018/04/20 Python
python仿evething的文件搜索器实例代码
2019/05/13 Python
在Python中使用MySQL--PyMySQL的基本使用方法
2019/11/19 Python
在django admin详情表单显示中添加自定义控件的实现
2020/03/11 Python
pandas将list数据拆分成行或列的实现
2020/12/13 Python
Desigual德国官网:在线购买原创服装
2018/03/27 全球购物
什么是接口(Interface)?
2013/02/01 面试题
PHP使用Redis队列执行定时任务实例讲解
2021/03/24 PHP
小区门卫值班制度
2014/01/24 职场文书
户外活动策划方案
2014/03/12 职场文书
社会实践活动总结
2015/02/05 职场文书
详解TypeScript的基础类型
2022/02/18 Javascript