Python中利用原始套接字进行网络编程的示例


Posted in Python onMay 04, 2015

在实验中需要自己构造单独的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使用PyGame播放Midi和Mp3文件的方法
Apr 24 Python
Python中文竖排显示的方法
Jul 28 Python
python中map()与zip()操作方法
Feb 27 Python
Python多进程multiprocessing.Pool类详解
Apr 27 Python
Python+selenium 获取一组元素属性值的实例
Jun 22 Python
在PyCharm中三步完成PyPy解释器的配置的方法
Oct 29 Python
Python绘制股票移动均线的实例
Aug 24 Python
flask 实现token机制的示例代码
Nov 07 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
Mar 12 Python
Python+PyQt5实现灭霸响指功能
May 25 Python
利用python对mysql表做全局模糊搜索并分页实例
Jul 12 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
Mar 03 Python
python通过索引遍历列表的方法
May 04 #Python
python实现将元祖转换成数组的方法
May 04 #Python
编写Python脚本来获取mp3文件tag信息的教程
May 04 #Python
python通过定义一个类实例作为ftp回调方法
May 04 #Python
Python中__new__与__init__方法的区别详解
May 04 #Python
Python中的ConfigParser模块使用详解
May 04 #Python
Python的__builtin__模块中的一些要点知识
May 02 #Python
You might like
用PHP实现ODBC数据分页显示一例
2006/10/09 PHP
mantis安装、配置和使用中的问题小结
2014/07/14 PHP
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
PHP执行SQL文件并将SQL文件导入到数据库
2015/09/17 PHP
Yii CDBCriteria常用方法实例小结
2017/01/19 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
2019/01/17 PHP
Jquery之美中不足小结
2011/02/16 Javascript
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
2011/09/28 Javascript
jQuery EasyUI API 中文文档 - EasyLoader 加载器
2011/09/29 Javascript
js事件冒泡实例分享(已测试)
2013/04/23 Javascript
自定义的一个简单时尚js下拉选择框
2013/11/20 Javascript
JS制作简单的三级联动
2015/03/18 Javascript
jQuery实现鼠标划过修改样式的方法
2015/04/14 Javascript
js实现当鼠标移到表格上时显示这一格全部内容的代码
2016/06/12 Javascript
JavaScript制作简单分页插件
2016/09/11 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
Html中 IFrame的用法及注意点
2016/12/22 Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
2018/02/03 Javascript
解决vue项目中页面调用数据 在数据加载完毕之前出现undefined问题
2019/11/14 Javascript
JS实现简易留言板增删功能
2020/02/08 Javascript
jQuery HTML css()方法与css类实例详解
2020/05/20 jQuery
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
[48:32]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python开发实例分享bt种子爬虫程序和种子解析
2014/05/21 Python
基于python脚本实现软件的注册功能(机器码+注册码机制)
2016/10/09 Python
flask入门之表单的实现
2018/07/18 Python
Pyinstaller打包.py生成.exe的方法和报错总结
2019/04/02 Python
python实现对服务器脚本敏感信息的加密解密功能
2019/08/13 Python
HTML5之SVG 2D入门8—文档结构及相关元素总结
2013/01/30 HTML / CSS
时装界的“朋克之母”:Vivienne Westwood
2017/07/06 全球购物
英国电视和家用电器购物网站:rlrdistribution.co.uk
2018/11/20 全球购物
统计每一学生的平均成绩
2014/06/06 面试题
27个经典Linux面试题及答案,你知道几个?
2013/01/10 面试题
宣传标语大全
2014/07/01 职场文书
学习十八大宣传标语
2014/10/09 职场文书
清明节扫墓活动总结
2015/02/09 职场文书