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实现的一个简单LRU cache
Sep 26 Python
python爬虫之urllib库常用方法用法总结大全
Nov 14 Python
Python 给屏幕打印信息加上颜色的实现方法
Apr 24 Python
通过PHP与Python代码对比的语法差异详解
Jul 10 Python
基于 Django 的手机管理系统实现过程详解
Aug 16 Python
如何在 Django 模板中输出 &quot;{{&quot;
Jan 24 Python
OpenCV中VideoCapture类的使用详解
Feb 14 Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
Feb 25 Python
Python datetime 格式化 明天,昨天实例
Mar 02 Python
python属于软件吗
Jun 18 Python
python 如何引入协程和原理分析
Nov 30 Python
Python Django / Flask如何使用Elasticsearch
Apr 19 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 str_pad() 将字符串填充成指定长度的字符串
2010/02/23 PHP
PHP $_FILES函数详解
2011/03/09 PHP
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
2013/04/22 PHP
PHP callback函数使用方法和注意事项
2015/01/23 PHP
php实现汉字验证码和算式验证码的方法
2015/03/07 PHP
Smarty使用自定义资源的方法
2015/08/08 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
2017/11/20 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
PHP简单验证码功能机制实例详解
2019/03/27 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
javascript 拖放效果实现代码
2010/01/22 Javascript
jQuery使用fadein方法实现渐出效果实例
2015/03/27 Javascript
javascript中replace( )方法的使用
2015/04/24 Javascript
JavaScript中利用for循环遍历数组
2017/01/15 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
Vue组件之极简的地址选择器的实现
2018/05/31 Javascript
vue左右侧联动滚动的实现代码
2018/06/06 Javascript
解决JavaScript layui 下拉框不显示的问题
2018/08/14 Javascript
jQuery事件多次绑定与解绑问题实例分析
2019/02/19 jQuery
Vue中axios的封装(报错、鉴权、跳转、拦截、提示)
2019/08/20 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
vue props default Array或是Object的正确写法说明
2020/07/30 Javascript
vue pages 多入口项目 + chainWebpack 全局引用缩写说明
2020/09/21 Javascript
[02:33]2018 DOTA2亚洲邀请赛回顾视频 再次拾起那些美妙的时刻
2018/04/10 DOTA
Python实现从订阅源下载图片的方法
2015/03/11 Python
Python打包文件夹的方法小结(zip,tar,tar.gz等)
2016/09/18 Python
利用python获取某年中每个月的第一天和最后一天
2016/12/15 Python
pygame游戏之旅 添加碰撞效果的方法
2018/11/20 Python
将python2.7添加进64位系统的注册表方式
2019/11/20 Python
Django自带的加密算法及加密模块详解
2019/12/03 Python
python编写一个会算账的脚本的示例代码
2020/06/02 Python
全方位了解CSS3的Regions扩展
2015/08/07 HTML / CSS
美国沙龙美发产品购物网站:Hair.com by L’Oreal
2020/11/09 全球购物
迟到检讨书2000字(精选篇)
2014/10/07 职场文书
常用的Python代码调试工具总结
2021/06/23 Python
Spring this调用当前类方法无法拦截的示例代码
2022/03/20 Java/Android