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 07 Python
Python编程之多态用法实例详解
May 19 Python
Python 12306抢火车票脚本
Feb 07 Python
python kmeans聚类简单介绍和实现代码
Feb 23 Python
Python 3.6 读取并操作文件内容的实例
Apr 23 Python
Python使用pyautogui模块实现自动化鼠标和键盘操作示例
Sep 04 Python
Python数据处理篇之Sympy系列(五)---解方程
Oct 12 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
Nov 04 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
Jan 12 Python
使用Pytorch来拟合函数方式
Jan 14 Python
Python使用Selenium模拟浏览器自动操作功能
Sep 08 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
Jan 09 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 url地址栏传中文乱码解决方法集合
2010/06/25 PHP
PHP的autoload自动加载机制使用说明
2010/12/28 PHP
set_exception_handler函数在ThinkPHP中的用法
2014/10/31 PHP
使用PHP similar text计算两个字符串相似度
2015/11/06 PHP
php使用变量动态创建类的对象用法示例
2017/02/06 PHP
IE iframe的onload方法分析小结
2010/01/07 Javascript
javascript window.confirm确认 取消对话框实现代码小结
2012/10/21 Javascript
超棒的响应式布局jQuery插件Freetile.js
2014/11/17 Javascript
js判断图片加载完成后获取图片实际宽高的方法
2016/02/25 Javascript
浅谈jquery高级方法描述与应用
2016/10/04 Javascript
微信小程序 devtool隐藏的秘密
2017/01/21 Javascript
Bootstrap布局之栅格系统学习笔记
2017/05/04 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
2017/10/16 Javascript
js html实现计算器功能
2018/11/13 Javascript
Node.js 进程平滑离场剖析小结
2019/01/24 Javascript
angular 实现同步验证器跨字段验证的方法
2019/04/11 Javascript
3分钟了解vue数据劫持的原理实现
2019/05/01 Javascript
js最全的数组的降维5种办法(小结)
2020/04/28 Javascript
从零学python系列之数据处理编程实例(一)
2014/05/22 Python
实例讲解Python中global语句下全局变量的值的修改
2016/06/16 Python
关于PyTorch 自动求导机制详解
2019/08/18 Python
tensorflow使用range_input_producer多线程读取数据实例
2020/01/20 Python
python turtle工具绘制四叶草的实例分享
2020/02/14 Python
jupyter 实现notebook中显示完整的行和列
2020/04/09 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
2020/04/24 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
2020/06/30 Python
挪威户外活动服装和装备购物网站:Bergfreunde挪威
2016/10/20 全球购物
Troy-Bilt官网:草坪割草机、吹雪机、分蘖机等
2019/02/19 全球购物
SK-II神仙水美国官网:SK-II美国
2020/02/25 全球购物
资产评估专业大学生求职信
2013/09/29 职场文书
经典大学生求职信范文
2014/01/06 职场文书
会计学专业求职信
2014/07/17 职场文书
试用期员工工作自我评价
2014/09/10 职场文书
关于对大人不礼貌的检讨书
2014/09/29 职场文书
2015年教师节慰问信
2015/03/23 职场文书
Win10开机修复磁盘错误怎么跳过?Win10关闭开机磁盘检查的方法
2022/09/23 数码科技