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异常处理总结
Aug 15 Python
Python中input和raw_input的一点区别
Oct 21 Python
对于Python的Django框架使用的一些实用建议
Apr 03 Python
python re模块findall()函数实例解析
Jan 19 Python
python实现的MySQL增删改查操作实例小结
Dec 19 Python
scrapy-redis源码分析之发送POST请求详解
May 15 Python
wxPython多个窗口的基本结构
Nov 19 Python
vue常用指令代码实例总结
Mar 16 Python
Python闭包与装饰器原理及实例解析
Apr 30 Python
python实现npy格式文件转换为txt文件操作
Jul 01 Python
基于opencv的selenium滑动验证码的实现
Jul 24 Python
python将数据插入数据库的代码分享
Aug 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
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
2014/07/18 PHP
一个经典的PHP验证码类分享
2014/11/18 PHP
如何正确配置Nginx + PHP
2016/07/15 PHP
PHP网页缓存技术优点及代码实例
2020/07/29 PHP
js实现简单的购物车有图有代码
2014/05/26 Javascript
详解Angularjs filter过滤器
2016/02/06 Javascript
javascript实现数字倒计时特效
2016/03/30 Javascript
基于angular实现三级联动的生日插件
2017/05/12 Javascript
vue使用ElementUI时导航栏默认展开功能的实现
2018/07/04 Javascript
工作中常用到的ES6语法
2018/09/04 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
解决vue打包报错Unexpected token: punc的问题
2020/10/24 Javascript
Python实现Logger打印功能的方法详解
2017/09/01 Python
Python学习笔记之if语句的使用示例
2017/10/23 Python
Python求出0~100以内的所有素数
2018/01/23 Python
Django使用httpresponse返回用户头像实例代码
2018/01/26 Python
在linux下实现 python 监控usb设备信号
2019/07/03 Python
手把手教你pycharm专业版安装破解教程(linux版)
2019/09/26 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
2020/03/10 Python
Python使用文件操作实现一个XX信息管理系统的示例
2020/07/02 Python
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
女士鞋子、包包和服装在线,第一款10美元:ShoeDazzle
2019/07/26 全球购物
中软国际Java程序员机试题
2012/08/19 面试题
职高毕业生自我鉴定
2013/10/21 职场文书
人事行政主管岗位职责
2013/12/22 职场文书
丑小鸭教学反思
2014/02/03 职场文书
大学生社会实践评语
2014/04/25 职场文书
趣味运动会策划方案
2014/06/02 职场文书
建筑横幅标语
2014/10/09 职场文书
维稳工作情况汇报
2014/10/27 职场文书
2015年图书馆个人工作总结
2015/05/26 职场文书
《伯牙绝弦》教学反思
2016/02/16 职场文书
《分数的意义》教学反思
2016/02/20 职场文书
jquery插件实现图片悬浮
2021/04/16 jQuery
python not运算符的实例用法
2021/06/30 Python