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的Urllib库的基本使用教程
Apr 30 Python
使用FastCGI部署Python的Django应用的教程
Jul 22 Python
Python实现统计文本文件字数的方法
May 05 Python
Python实现matplotlib显示中文的方法详解
Feb 06 Python
Django rest framework实现分页的示例
May 24 Python
Python异常的检测和处理方法
Oct 26 Python
Python两台电脑实现TCP通信的方法示例
May 06 Python
浅谈Python 递归算法指归
Aug 22 Python
Django2 连接MySQL及model测试实例分析
Dec 10 Python
tensorflow模型转ncnn的操作方式
May 25 Python
查看keras各种网络结构各层的名字方式
Jun 11 Python
手把手教你用Django执行原生SQL的方法
Feb 18 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/06/05 PHP
php实现微信公众号主动推送消息
2015/12/31 PHP
PHP文件上传类实例详解
2016/04/08 PHP
PHP中Laravel 关联查询返回错误id的解决方法
2017/04/01 PHP
javascript 拷贝节点cloneNode()使用介绍
2014/04/03 Javascript
javascript自定义函数参数传递为字符串格式
2014/07/29 Javascript
javascript模拟C#格式化字符串
2015/08/26 Javascript
利用jQuery实现漂亮的圆形进度条倒计时插件
2015/09/30 Javascript
javascript基础知识
2016/06/07 Javascript
js删除Array数组中指定元素的两种方法
2016/08/03 Javascript
Javascript使用function创建类的两种方法(推荐)
2016/11/19 Javascript
javascript实现非常简单的小数取整功能示例
2017/06/13 Javascript
Bootstrap按钮组实例详解
2017/07/03 Javascript
对vue事件的延迟执行实例讲解
2018/08/28 Javascript
JS实现图片轮播效果实例详解【可自动和手动】
2019/04/04 Javascript
通过说明与示例了解js五种设计模式
2019/06/17 Javascript
适合前端Vue开发童鞋的跨平台Weex的使用详解
2019/10/16 Javascript
vue + elementUI实现省市县三级联动的方法示例
2019/10/29 Javascript
[04:09]2014DOTA2国际邀请赛Ti西雅图 历届冠军相继出局 BBC综述今日比赛
2014/07/20 DOTA
[01:01:23]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第一场 11.26
2020/11/30 DOTA
python使用rabbitmq实现网络爬虫示例
2014/02/20 Python
跟老齐学Python之玩转字符串(2)更新篇
2014/09/28 Python
Python脚本在Appium库上对移动应用实现自动化测试
2015/04/17 Python
Python出现segfault错误解决方法
2016/04/16 Python
Python:slice与indices的用法
2019/11/25 Python
OpenCV哈里斯(Harris)角点检测的实现
2020/01/15 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
2020/04/07 Python
Python如何获取文件路径/目录
2020/09/22 Python
阿姆斯特丹城市卡:Amsterdam Pass
2019/12/01 全球购物
出国留学经济担保书
2014/04/01 职场文书
寒假家长评语大全
2014/04/16 职场文书
优秀学生干部先进事迹材料
2014/05/26 职场文书
2015年社区重阳节活动总结
2015/07/30 职场文书
2016年“我们的节日·清明节”活动总结
2016/04/01 职场文书
python爬取新闻门户网站的示例
2021/04/25 Python
Redis读写分离搭建的完整步骤
2021/09/14 Redis