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 urlopen()函数 示例分享
Jun 12 Python
Python实现的简单文件传输服务器和客户端
Apr 08 Python
Python的Django框架中的Context使用
Jul 15 Python
Python argv用法详解
Jan 08 Python
深入理解 Python 中的多线程 新手必看
Nov 20 Python
python django 实现验证码的功能实例代码
May 18 Python
TensorFLow用Saver保存和恢复变量
Mar 10 Python
numpy的文件存储.npy .npz 文件详解
Jul 09 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
Aug 17 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
May 12 Python
Python jieba结巴分词原理及用法解析
Nov 05 Python
selenium+headless chrome爬虫的实现示例
Jan 08 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获取远程图片的两种 CURL方式和sockets方式获取远程图片
2011/11/07 PHP
for循环连续求和、九九乘法表代码
2012/02/20 PHP
30个php操作redis常用方法代码例子
2014/07/05 PHP
php处理复杂xml数据示例
2016/07/11 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
2019/09/05 PHP
js 判断 enter 事件
2009/02/12 Javascript
js实现上传图片预览的方法
2015/02/09 Javascript
JS修改iframe页面背景颜色的方法
2015/04/01 Javascript
javascript制作幻灯片(360度全景图片)
2015/07/28 Javascript
JavaScript实现图片自动加载的瀑布流效果
2016/04/11 Javascript
jQuery与JS加载事件用法分析
2016/09/04 Javascript
vuejs动态组件给子组件传递数据的方法详解
2016/09/09 Javascript
vue页面加载闪烁问题的解决方法
2018/03/28 Javascript
浅谈angularJS2中的界面跳转方法
2018/08/31 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
2019/01/07 Javascript
vue.js this.$router.push获取不到params参数问题
2020/03/03 Javascript
[34:39]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第二局
2016/03/05 DOTA
python中的多重继承实例讲解
2014/09/28 Python
python打开网页和暂停实例
2014/09/30 Python
简单介绍Python中利用生成器实现的并发编程
2015/05/04 Python
在Python的Django框架中包装视图函数
2015/07/20 Python
python3 pillow生成简单验证码图片的示例
2017/09/19 Python
解决Python下json.loads()中文字符出错的问题
2018/12/19 Python
用Python将结果保存为xlsx的方法
2019/01/28 Python
在Django下测试与调试REST API的方法详解
2019/08/29 Python
浅析CSS3 用text-overflow解决文字排版问题
2020/10/28 HTML / CSS
加拿大快时尚零售商:Ardene
2018/02/14 全球购物
为什么要做架构设计
2015/07/08 面试题
公司募捐倡议书
2014/05/14 职场文书
绿色环保标语
2014/06/12 职场文书
渠道运营商合作协议书范本
2014/10/06 职场文书
售票员岗位职责
2015/02/15 职场文书
甲午大海战观后感
2015/06/02 职场文书
2016秋季运动会开幕词
2016/03/04 职场文书
tensorflow中的梯度求解及梯度裁剪操作
2021/05/26 Python
CSS中Single Div 绘图技巧的实现
2021/06/18 HTML / CSS