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编写一个国际象棋AI程序
Nov 28 Python
编写Python的web框架中的Model的教程
Apr 29 Python
在Django中限制已登录用户的访问的方法
Jul 23 Python
Python获取linux主机ip的简单实现方法
Apr 18 Python
python使用Matplotlib画饼图
Sep 25 Python
pycharm运行程序时在Python console窗口中运行的方法
Dec 03 Python
Python3网络爬虫中的requests高级用法详解
Jun 18 Python
python tkinter窗口最大化的实现
Jul 15 Python
Python GUI库PyQt5图形和特效样式QSS介绍
Feb 25 Python
Python参数传递机制传值和传引用原理详解
May 22 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
Sep 09 Python
python numpy中multiply与*及matul 的区别说明
May 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 字符串编码截取函数(兼容utf-8和gb2312)
2009/05/02 PHP
php目录操作实例代码
2014/02/21 PHP
自己写的兼容低于PHP 5.5版本的array_column()函数
2014/10/24 PHP
微信公众平台开发关注及取消关注事件的方法
2014/12/23 PHP
symfony表单与页面实现技巧
2015/01/26 PHP
PHP通过加锁实现并发情况下抢码功能
2016/08/10 PHP
js资料prototype 属性
2007/03/13 Javascript
让FireFox支持innerText的实现代码
2009/12/01 Javascript
jQuery Select(单选) 模拟插件 V1.3.62 改进版
2010/07/17 Javascript
原生js实现跨浏览器获取鼠标按键的值
2013/04/08 Javascript
javascript去掉前后空格的实例
2013/11/07 Javascript
js实现右下角提示框的方法
2015/02/03 Javascript
JavaScript中字符串拼接的基本方法
2015/07/07 Javascript
vue.js初学入门教程(2)
2016/11/07 Javascript
JS实现JSON.stringify的实例代码讲解
2017/02/07 Javascript
vue生成token并保存到本地存储中
2018/07/17 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
2018/09/27 Javascript
Vue.js实现可排序的表格组件功能示例
2019/02/19 Javascript
vue 组件开发原理与实现方法详解
2019/11/29 Javascript
Vuex的各个模块封装的实现
2020/06/05 Javascript
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
python实现获取客户机上指定文件并传输到服务器的方法
2015/03/16 Python
使用python实现tcp自动重连
2017/07/02 Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
2018/05/04 Python
Python中使用双下划线防止类属性被覆盖问题
2019/06/27 Python
python修改文件内容的3种方法详解
2019/11/15 Python
详解python的变量缓存机制
2021/01/24 Python
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
北大研究生linux应用求职信
2013/10/29 职场文书
业务员岗位职责范本
2013/12/15 职场文书
反邪教标语
2014/06/23 职场文书
大学生违纪检讨书300字
2014/10/25 职场文书
依法行政工作汇报
2014/10/28 职场文书
解决golang 关于全局变量的坑
2021/05/06 Golang
浅谈Python响应式类库RxPy
2021/06/14 Python
AudioContext 实现音频可视化(web技术分享)
2022/02/24 Javascript