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数据结构之二叉树的建立实例
Apr 29 Python
Python中使用支持向量机SVM实践
Dec 27 Python
浅谈Python黑帽子取代netcat
Feb 10 Python
numpy实现合并多维矩阵、list的扩展方法
May 08 Python
Python Unittest根据不同测试环境跳过用例的方法
Dec 16 Python
django 消息框架 message使用详解
Jul 22 Python
python3 mmh3安装及使用方法
Oct 09 Python
解决pycharm最左侧Tool Buttons显示不全的问题
Dec 17 Python
使用Python打造一款间谍程序的流程分析
Feb 21 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
Mar 24 Python
MATLAB数学建模之画图汇总
Jul 16 Python
python实现双人五子棋(终端版)
Dec 30 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中模糊查询并关联三个select框
2017/06/19 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
根据鼠标的位置动态的控制层的位置
2009/11/24 Javascript
Javascript学习笔记一 之 数据类型
2010/12/15 Javascript
javascript函数以及基础写法100多条实用整理
2013/01/13 Javascript
JavaScript生成的动态下雨背景效果实现方法
2015/02/25 Javascript
JS实现超简单的鼠标拖动效果
2015/11/02 Javascript
js获取时间函数及扩展函数的方法
2016/10/30 Javascript
javascript内存分配原理实例分析
2017/04/10 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
2017/09/26 Javascript
AngularJS的$location使用方法详解
2017/10/19 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
2017/11/15 Javascript
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
2019/02/21 Javascript
JS实现选项卡效果的代码实例
2019/05/20 Javascript
Node.js系列之连接DB的方法(3)
2019/08/30 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
解决layui 表单元素radio不显示渲染的问题
2019/09/04 Javascript
JS实现拖拽元素时与另一元素碰撞检测
2020/08/27 Javascript
[01:31](回顾)杀出重围,决战TI之巅
2014/07/01 DOTA
python获得一个月有多少天的方法
2015/06/04 Python
用python实现将数组元素按从小到大的顺序排列方法
2018/07/02 Python
用Python将mysql数据导出成json的方法
2018/08/21 Python
python lambda表达式(匿名函数)写法解析
2019/09/16 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
Python中openpyxl实现vlookup函数的实例
2020/10/28 Python
教师实习的自我鉴定
2013/10/26 职场文书
前处理组长岗位职责
2014/03/01 职场文书
鸿星尔克广告词
2014/03/21 职场文书
《青蛙看海》教学反思
2014/04/23 职场文书
2014年社区国庆节活动方案
2014/09/16 职场文书
2014领导班子四风剖析对照检查材料思想汇报
2014/09/20 职场文书
python读取pdf格式文档的实现代码
2021/04/01 Python
教你使用TensorFlow2识别验证码
2021/06/11 Python
Java 超详细讲解设计模式之中的抽象工厂模式
2022/03/25 Java/Android
Docker下安装Oracle19c
2022/04/13 Servers
docker compose 部署 golang 的 Athens 私有代理问题
2022/04/28 Servers