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 相关文章推荐
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
May 02 Python
Python中用altzone()方法处理时区的教程
May 22 Python
Python中map和列表推导效率比较实例分析
Jun 17 Python
win10环境下python3.5安装步骤图文教程
Feb 03 Python
Python使用flask框架操作sqlite3的两种方式
Jan 31 Python
django用户注册、登录、注销和用户扩展的示例
Mar 19 Python
3分钟学会一个Python小技巧
Nov 23 Python
关于python导入模块import与常见的模块详解
Aug 28 Python
python 魔法函数实例及解析
Sep 25 Python
基于Python实现视频的人脸融合功能
Jun 12 Python
pycharm 复制代码出现空格的解决方式
Jan 15 Python
pycharm代码删除恢复的方法
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
用PHP实现ODBC数据分页显示一例
2006/10/09 PHP
PHP连接SQLServer2005 的问题解决方法
2010/07/19 PHP
set_include_path和get_include_path使用及注意事项
2013/02/02 PHP
setcookie中Cannot modify header information-headers already sent by错误的解决方法详解
2013/05/08 PHP
CodeIgniter中使用Smarty3基本配置
2015/06/29 PHP
基于PHP+mysql实现新闻发布系统的开发
2020/08/06 PHP
IE浏览器兼容Firefox的JS脚本的代码
2008/10/23 Javascript
js使用eval解析json(js中使用json)
2014/01/17 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
2015/08/26 Javascript
js图片轮播手动切换特效
2017/01/12 Javascript
javascript表达式和运算符详解
2017/02/07 Javascript
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
2017/05/02 Javascript
使用Vue动态生成form表单的实例代码
2018/04/26 Javascript
原生JS实现的雪花飘落动画效果
2018/05/03 Javascript
mpvue+vant app搭建微信小程序的方法步骤
2019/02/11 Javascript
setTimeout与setInterval的区别浅析
2019/03/23 Javascript
vue滚动tab跟随切换效果
2020/06/29 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
[03:47]2015国际邀请赛第三日现场精彩回顾
2015/08/08 DOTA
python django 实现验证码的功能实例代码
2017/05/18 Python
python中Matplotlib实现绘制3D图的示例代码
2017/09/04 Python
numpy中索引和切片详解
2017/12/15 Python
python爬虫框架scrapy实现模拟登录操作示例
2018/08/02 Python
python脚本之一键移动自定格式文件方法实例
2019/09/02 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
2020/02/04 Python
安装多个版本的TensorFlow的方法步骤
2020/04/21 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
2020/07/01 Python
咖啡书吧创业计划书
2014/01/13 职场文书
合作意向书范本
2014/03/31 职场文书
人力资源管理专业求职信
2014/07/23 职场文书
最美护士演讲稿
2014/08/27 职场文书
七年级语文教学反思
2016/03/03 职场文书
财务会计个人原因辞职信
2019/06/21 职场文书
如何利用STAR法则制作留学文书?
2019/08/26 职场文书
修辞手法有哪些?
2019/08/29 职场文书
mysql数据库如何转移到oracle
2022/12/24 MySQL