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测试驱动开发实例
Oct 08 Python
python利用不到一百行代码实现一个小siri
Mar 02 Python
Python3调用微信企业号API发送文本消息代码示例
Nov 10 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
Nov 23 Python
PyQt5每天必学之拖放事件
Aug 27 Python
判断python对象是否可调用的三种方式及其区别详解
Jan 31 Python
Pytorch中Tensor与各种图像格式的相互转化详解
Dec 26 Python
python文件和文件夹复制函数
Feb 07 Python
python实现拼图小游戏
Feb 22 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
Jul 31 Python
python Tornado框架的使用示例
Oct 19 Python
教你怎么用Python监控愉客行车程
Apr 29 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
Terran兵种对照表
2020/03/14 星际争霸
ThinkPHP CURD方法之where方法详解
2014/06/18 PHP
apache php mysql开发环境安装教程
2016/07/28 PHP
PHP面向对象之事务脚本模式(详解)
2017/06/07 PHP
用JS实现一个TreeMenu效果分享
2011/08/28 Javascript
由JavaScript中call()方法引发的对面向对象继承机制call的思考
2011/09/12 Javascript
js实现日期级联效果
2014/01/23 Javascript
基于jquery ui的alert,confirm方案(支持换肤)
2015/04/03 Javascript
JavaScript实现向setTimeout执行代码传递参数的方法
2015/04/16 Javascript
JavaScript多并发问题如何处理
2015/10/28 Javascript
JS实现网页标题随机显示名人名言的方法
2015/11/03 Javascript
将input框中输入内容显示在相应的div中【三种方法可选】
2017/05/08 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
2017/07/07 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
js生成word中图片处理方法
2018/01/06 Javascript
微信小程序实现城市列表选择
2018/06/05 Javascript
详解Vue.js使用Swiper.js在iOS
2018/09/10 Javascript
js 实现ajax发送步骤过程详解
2019/07/25 Javascript
vue+element导航栏高亮显示的解决方式
2019/11/12 Javascript
如何用JS模拟实现数组的map方法
2020/07/30 Javascript
[03:40]DOTA2抗疫特别篇《英雄年代》
2020/02/28 DOTA
Python多线程同步Lock、RLock、Semaphore、Event实例
2014/11/21 Python
python调用机器喇叭发出蜂鸣声(Beep)的方法
2015/03/23 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
2018/04/19 Python
python绘图模块matplotlib示例详解
2019/07/26 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
2020/05/11 Python
python 两种方法删除空文件夹
2020/09/29 Python
Supersmart英国:欧洲市场首批食品补充剂供应商之一
2018/05/05 全球购物
装饰资料员岗位职责
2013/12/30 职场文书
《只有一个地球》教学反思
2014/02/14 职场文书
农村优秀教师事迹材料
2014/08/27 职场文书
在校大学生自我评价范文
2014/09/12 职场文书
小学四年级学生评语
2014/12/26 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
Django一小时写出账号密码管理系统
2021/04/29 Python
Windows11 Insider Preview Build 25206今日发布 更新内容汇总
2022/09/23 数码科技