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使用xauth方式登录饭否网然后发消息
Apr 11 Python
Python算法输出1-9数组形成的结果为100的所有运算式
Nov 03 Python
python dataframe astype 字段类型转换方法
Apr 11 Python
解决Python2.7读写文件中的中文乱码问题
Apr 12 Python
python3实现163邮箱SMTP发送邮件
May 22 Python
django认证系统实现自定义权限管理的方法
Jul 16 Python
pandas使用apply多列生成一列数据的实例
Nov 28 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
Jun 03 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
Jun 19 Python
Python类中方法getitem和getattr详解
Aug 30 Python
Python使用socket模块实现简单tcp通信
Aug 18 Python
Python基础之变量的相关知识总结
Jun 23 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的历史和优缺点
2006/10/09 PHP
PHP Session_Regenerate_ID函数双释放内存破坏漏洞
2011/01/27 PHP
PHP类型约束用法示例
2016/09/28 PHP
PHP基于DOM创建xml文档的方法示例
2017/02/08 PHP
phpStudy 2016 使用教程详解(支持PHP7)
2017/10/18 PHP
Packer 3.0 JS压缩及混淆工具 下载
2007/05/03 Javascript
Javascript Function对象扩展之延时执行函数
2010/07/06 Javascript
JS函数实现动态添加CSS样式表文件
2012/12/15 Javascript
用json方式实现在 js 中建立一个map
2014/05/02 Javascript
js自定义鼠标右键的实现原理及源码
2014/06/23 Javascript
jquery实现网页的页面平滑滚动效果代码
2015/11/02 Javascript
AngularJS中的指令全面解析(必看)
2016/05/20 Javascript
后端接收不到AngularJs中$http.post发送的数据原因分析及解决办法
2016/07/05 Javascript
关于input全选反选恶心的异常情况
2016/07/24 Javascript
JS实现简单的天数计算器完整实例
2017/04/28 Javascript
详解nodejs微信jssdk后端接口
2017/05/25 NodeJs
JS判断一个数是否是水仙花数
2017/06/11 Javascript
原JS实现banner图的常用功能
2017/06/12 Javascript
通过源码分析Vue的双向数据绑定详解
2017/09/24 Javascript
nodejs 简单实现动态html的方法
2018/05/12 NodeJs
json字符串对象转换代码实例
2019/09/28 Javascript
vue实现跳转接口push 转场动画示例
2019/11/01 Javascript
[33:09]完美世界DOTA2联赛循环赛 Forest vs DM BO2第二场 10.29
2020/10/29 DOTA
跟老齐学Python之使用Python操作数据库(1)
2014/11/25 Python
Python装饰器使用实例:验证参数合法性
2015/06/24 Python
用Eclipse写python程序
2018/02/10 Python
python3+PyQt5+Qt Designer实现扩展对话框
2018/04/20 Python
python自动化测试之异常及日志操作实例分析
2019/11/09 Python
通过HTML5规范搞定i、em、b、strong元素的区别
2017/03/04 HTML / CSS
教师党员思想汇报
2014/01/06 职场文书
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
2014年优秀党员材料
2014/12/18 职场文书
大学生求职信怎么写
2015/03/19 职场文书
建党伟业电影观后感
2015/06/01 职场文书
七一表彰大会简报
2015/07/20 职场文书
Pandas实现DataFrame的简单运算、统计与排序
2022/03/31 Python