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控制台英汉汉英电子词典
Apr 23 Python
python使用cStringIO实现临时内存文件访问的方法
Mar 26 Python
K-近邻算法的python实现代码分享
Dec 09 Python
《与孩子一起学编程》python自测题
May 27 Python
python+pandas+时间、日期以及时间序列处理方法
Jul 10 Python
python对矩阵进行转置的2种处理方法
Jul 17 Python
python中count函数简单的实例讲解
Feb 06 Python
python range实例用法分享
Feb 06 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
Feb 21 Python
Python爬虫之Spider类用法简单介绍
Aug 04 Python
Python中glob库实现文件名的匹配
Jun 18 Python
PO模式在selenium自动化测试框架的优势
Mar 20 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+mysql一个名片库程序
2006/10/09 PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
2013/06/06 PHP
PHP Yii框架之表单验证规则大全
2015/11/16 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
2007/12/08 Javascript
Js+Flash实现访问剪切板操作
2012/11/20 Javascript
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
2013/02/04 Javascript
jquery中获取id值方法小结
2013/09/22 Javascript
javascript的parseFloat()方法精度问题探讨
2013/11/26 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
2015/03/14 Javascript
JavaScript运算符小结
2015/06/03 Javascript
Nodejs中的this详解
2016/03/26 NodeJs
JQuery遍历元素的父辈和祖先的方法
2016/09/18 Javascript
AngularJS学习笔记(三)数据双向绑定的简单实例
2016/11/08 Javascript
学习使用bootstrap的modal和carousel
2016/12/09 Javascript
vue父子组件的数据传递示例
2017/03/07 Javascript
JavaScript屏蔽Backspace键的实现代码
2017/11/02 Javascript
vue动态路由配置及路由传参的方式
2018/05/23 Javascript
vue-cli项目使用mock数据的方法(借助express)
2019/04/15 Javascript
使用JavaScript通过前端发送电子邮件
2020/05/22 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
2020/06/16 Javascript
[39:32]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第二场
2014/05/23 DOTA
采用Psyco实现python执行速度提高到与编译语言一样的水平
2014/10/11 Python
浅谈Python数据类型判断及列表脚本操作
2016/11/04 Python
Python利用字典将两个通讯录文本合并为一个文本实例
2018/01/16 Python
Python 实现数据结构-循环队列的操作方法
2019/07/17 Python
html5中监听canvas内部元素点击事件的三种方法
2019/04/28 HTML / CSS
猫途鹰:全球领先的旅游点评社区
2017/04/07 全球购物
我的中国梦演讲稿300字
2014/08/19 职场文书
软件测试专业推荐信
2014/09/18 职场文书
公司租房协议书
2014/10/14 职场文书
社区党员群众路线教育实践活动心得体会
2014/11/03 职场文书
试用期工作表现自我评价
2015/03/06 职场文书
2016民族团结先进个人事迹材料
2016/02/26 职场文书
Java Optional<Foo>转换成List<Bar>的实例方法
2021/06/20 Java/Android
Oracle数据库事务的开启与结束详解
2022/06/25 Oracle