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抓取模板之家的CSS模板
Mar 16 Python
Python实现二分查找算法实例
May 26 Python
Python 字典与字符串的互转实例
Jan 13 Python
深入理解Python中的super()方法
Nov 20 Python
对python:threading.Thread类的使用方法详解
Jan 31 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
Apr 18 Python
Python Collatz序列实现过程解析
Oct 12 Python
python图片指定区域替换img.paste函数的使用
Apr 09 Python
python nohup 实现远程运行不宕机操作
Apr 16 Python
python编写softmax函数、交叉熵函数实例
Jun 11 Python
python 三种方法实现对Excel表格的读写
Nov 19 Python
python实现简单反弹球游戏
Apr 12 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
PDO版本问题 Invalid parameter number: no parameters were bound
2013/01/06 PHP
php使用APC实现实时上传进度条功能
2015/10/26 PHP
PHP提取字符串中的手机号正则表达式怎么写
2017/07/17 PHP
php数据序列化测试实例详解
2017/08/12 PHP
PHP实现通过二维数组键值获取一维键名操作示例
2019/10/11 PHP
firefox事件处理之自动查找event的函数(用于onclick=foo())
2010/08/05 Javascript
jquery打开直接跳到网页最下面、最低端实现代码
2013/04/22 Javascript
查找iframe里元素的方法可传参
2013/09/11 Javascript
js实现select跳转功能代码
2014/10/22 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
2015/03/13 Javascript
jquery实现图片上传前本地预览功能
2016/05/10 Javascript
微信小程序开发实战教程之手势解锁
2016/11/18 Javascript
js实现方块上下左右移动效果
2017/08/17 Javascript
vue2.0使用v-for循环制作多级嵌套菜单栏
2018/06/25 Javascript
JavaScript中0、空字符串、'0'是true还是false的知识点分享
2019/09/16 Javascript
修改vue源码实现动态路由缓存的方法
2020/01/21 Javascript
js实现随机圆与矩形功能
2020/10/29 Javascript
[01:24:34]2014 DOTA2华西杯精英邀请赛5 24 DK VS LGD
2014/05/25 DOTA
[01:13:17]Secret vs NB 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
2015/04/01 Python
理解生产者消费者模型及在Python编程中的运用实例
2016/06/26 Python
Python 判断文件或目录是否存在的实例代码
2018/07/19 Python
python实现公司年会抽奖程序
2019/01/22 Python
Django+Xadmin构建项目的方法步骤
2019/03/06 Python
详解Python 函数如何重载?
2019/04/23 Python
python自动保存百度盘资源到百度盘中的实例代码
2019/08/26 Python
利用rest framework搭建Django API过程解析
2019/08/31 Python
PyTorch 中的傅里叶卷积实现示例
2020/12/11 Python
CSS3哪些新特性值得称赞
2016/03/02 HTML / CSS
html2canvas把div保存图片高清图的方法示例
2018/03/05 HTML / CSS
美国在线肉类和海鲜配送:Crowd Cow
2020/10/02 全球购物
个人实用的自我评价范文
2013/11/23 职场文书
小学班级特色活动方案
2014/08/31 职场文书
查摆问题整改措施范文
2014/10/11 职场文书
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
2021/11/01 MongoDB
前端实现滑动按钮AJAX与后端交互的示例代码
2022/02/24 Javascript