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根据开头和结尾字符串获取中间字符串的方法
Mar 26 Python
python如何实现反向迭代
Mar 20 Python
Pycharm设置去除显示的波浪线方法
Oct 28 Python
在Python中增加和插入元素的示例
Nov 01 Python
Python Pandas中根据列的值选取多行数据
Jul 08 Python
在django view中给form传入参数的例子
Jul 19 Python
Python函数的默认参数设计示例详解
Dec 01 Python
Python random模块制作简易的四位数验证码
Feb 01 Python
Python基础之字符串操作常用函数集合
Feb 09 Python
Python 实现图片转字符画的示例(静态图片,gif皆可)
Nov 05 Python
Pandas数据分析的一些常用小技巧
Feb 07 Python
Python中的变量与常量
Nov 11 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 向访客和爬虫显示不同的内容
2009/11/09 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
thinkPHP和onethink微信支付插件分享
2019/08/11 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
javascript 支持ie和firefox杰奇翻页函数
2008/07/22 Javascript
一个用javascript写的select支持上下键、首字母筛选以及回车取值的功能
2009/09/09 Javascript
javascript 年月日联动实现核心代码
2009/12/21 Javascript
js键盘上下左右键怎么触发function(实例讲解)
2013/12/14 Javascript
jquery滚动到顶部底部代码
2015/04/20 Javascript
js数组去重的5种算法实现
2015/11/04 Javascript
基于JS实现密码框(password)中显示文字提示功能代码
2016/05/27 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
2016/08/01 Javascript
Vue自定义指令使用方法详解
2017/08/21 Javascript
Vue2.0父组件与子组件之间的事件发射与接收实例代码
2017/09/19 Javascript
关于js对textarea换行符的处理方法浅析
2018/08/03 Javascript
vue+element树组件 实现树懒加载的过程详解
2019/10/21 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
2020/04/03 Javascript
利用JavaScript模拟京东按键输入功能
2020/12/01 Javascript
Python json 错误xx is not JSON serializable解决办法
2017/03/15 Python
Python实现一个带权无回置随机抽选函数的方法
2019/07/24 Python
parser.add_argument中的action使用
2020/04/20 Python
浅谈css3中的渐进增强和优雅降级
2017/12/01 HTML / CSS
美国性感女装网站:bebe
2017/03/04 全球购物
美国户外烹饪产品购物网站:Outdoor Cooking
2020/01/10 全球购物
会计自荐信范文
2014/03/09 职场文书
国旗下的演讲稿
2014/05/08 职场文书
党员干部形式主义个人整改措施
2014/09/17 职场文书
秋季运动会开幕词
2015/01/28 职场文书
华清池导游词
2015/02/02 职场文书
庐山导游词
2015/02/03 职场文书
会计主管岗位职责
2015/04/02 职场文书
2015年教研组工作总结
2015/05/04 职场文书
windows下快速安装nginx并配置开机自启动的方法
2021/05/11 Servers
Python道路车道线检测的实现
2021/06/27 Python
Win10鼠标宏怎么设置?win10系统鼠标宏的设置方法
2022/08/14 数码科技