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中的jquery PyQuery库使用小结
May 13 Python
利用Python中的mock库对Python代码进行模拟测试
Apr 16 Python
python字典排序实例详解
May 20 Python
python中numpy基础学习及进行数组和矢量计算
Feb 12 Python
python实现八大排序算法(2)
Sep 14 Python
Python中的pygal安装和绘制直方图代码分享
Dec 08 Python
使用pandas读取csv文件的指定列方法
Apr 21 Python
利用Anaconda简单安装scrapy框架的方法
Jun 13 Python
matplotlib实现热成像图colorbar和极坐标图的方法
Dec 13 Python
pandas中DataFrame修改index、columns名的方法示例
Aug 02 Python
python使用opencv在Windows下调用摄像头实现解析
Nov 26 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
Sep 16 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
一个PHP操作Access类(PHP+ODBC+Access)
2007/01/02 PHP
利用discuz自带通行证整合dedecms的方法以及文件下载
2007/03/06 PHP
PHP连接SQLServer2005的方法
2015/01/27 PHP
PHP入门教程之数学运算技巧总结
2016/09/11 PHP
php+js实现的无刷新下载文件功能示例
2019/08/23 PHP
javascript 自定义事件初探
2009/08/21 Javascript
JavaScript 轻松搞定快捷留言功能 只需一行代码
2010/04/01 Javascript
jquery dialog键盘事件代码
2010/08/01 Javascript
javascript 快速排序函数代码
2012/05/30 Javascript
JavaScript保留两位小数的2个自定义函数
2014/05/05 Javascript
node.js中的buffer.toJSON方法使用说明
2014/12/14 Javascript
使用Raygun来自动追踪AngularJS中的异常
2015/06/23 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
JavaScript高级教程5.6之基本包装类型(详细)
2015/11/23 Javascript
基于jQuery实现Ajax验证用户名是否存在实例
2016/03/30 Javascript
Node.js读取文件内容示例
2017/03/07 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
一个有意思的鼠标点击文字特效jquery代码
2017/09/23 jQuery
Vue基于NUXT的SSR详解
2017/10/24 Javascript
解决vue js IOS H5focus无法自动弹出键盘的问题
2018/08/30 Javascript
Element中的Cascader(级联列表)动态加载省\市\区数据的方法
2019/03/27 Javascript
vue组件 keep-alive 和 transition 使用详解
2019/10/11 Javascript
全面解析JavaScript Module模式
2020/07/24 Javascript
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
2015/08/10 Python
python fabric实现远程部署
2017/01/05 Python
Python import与from import使用及区别介绍
2018/09/06 Python
详解DeBug Python神级工具PySnooper
2019/07/03 Python
pandas通过字典生成dataframe的方法步骤
2019/07/23 Python
django API 中接口的互相调用实例
2020/04/01 Python
CSS3之背景尺寸Background-size使用介绍
2013/10/14 HTML / CSS
Daisy London官网:英国最大的首饰集团IBB旗下
2019/02/28 全球购物
教师拔河比赛广播稿
2014/10/14 职场文书
交通事故协议书范本
2014/11/18 职场文书
2015年安全生产工作总结范文
2015/04/02 职场文书
MySQL中存储时间的最佳实践指南
2021/07/01 MySQL
CSS 鼠标点击拖拽效果的实现代码
2022/12/24 HTML / CSS