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检测服务器是否正常
Feb 16 Python
Python实现的多线程端口扫描工具分享
Jan 21 Python
django实现登录时候输入密码错误5次锁定用户十分钟
Nov 05 Python
详解Python下Flask-ApScheduler快速指南
Nov 04 Python
python实现点击按钮修改数据的方法
Jul 17 Python
Python3使用xlrd、xlwt处理Excel方法数据
Feb 28 Python
python实现字符串和数字拼接
Mar 02 Python
python实现扫雷小游戏
Apr 24 Python
python实现126邮箱发送邮件
May 20 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
Feb 26 Python
pycharm2021激活码使用教程(永久激活亲测可用)
Mar 30 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
PHP中使用xmlreader读取xml数据示例
2014/12/29 PHP
php制作文本式留言板
2015/03/18 PHP
yii去掉必填项中星号的方法
2015/12/28 PHP
PHP中的多种加密技术及代码示例解析
2016/10/20 PHP
ASP Json Parser修正版
2009/12/06 Javascript
js监听键盘事件示例代码
2013/07/26 Javascript
jquery删除ID为sNews的tr元素的内容
2014/04/10 Javascript
angularjs学习笔记之双向数据绑定
2015/09/26 Javascript
JQuery中解决重复动画的方法
2016/10/17 Javascript
js学习总结之dom2级事件基础知识详解
2017/07/27 Javascript
JS通过位运算实现权限加解密
2018/08/14 Javascript
vue从一个页面跳转到另一个页面并携带参数的解决方法
2019/08/12 Javascript
Emberjs 通过 axios 下载文件的方法
2019/09/03 Javascript
使用axios请求接口,几种content-type的区别详解
2019/10/29 Javascript
Vue的自定义组件不能使用click方法的解决
2020/07/28 Javascript
vue实现简易图片左右旋转,上一张,下一张组件案例
2020/07/31 Javascript
python二分法实现实例
2013/11/21 Python
python使用any判断一个对象是否为空的方法
2014/11/19 Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
2016/06/18 Python
python opencv之SURF算法示例
2018/02/24 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
2018/11/23 Python
Python 3.8 新功能全解
2019/07/25 Python
python用requests实现http请求代码实例
2019/10/31 Python
Python协程 yield与协程greenlet简单用法示例
2019/11/22 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
2020/02/19 Python
Python pytesseract验证码识别库用法解析
2020/06/29 Python
MoviePy常用剪辑类及Python视频剪辑自动化
2020/12/18 Python
Mistine官方海外旗舰店:泰国国民彩妆品牌
2016/12/28 全球购物
美国最佳选择产品网站:Best Choice Products
2019/05/27 全球购物
十一个高级MySql面试题
2014/10/06 面试题
超市业务员岗位职责
2013/12/05 职场文书
行政部总经理岗位职责
2014/01/04 职场文书
2014村务公开实施方案
2014/02/25 职场文书
初中作文评语集锦
2014/12/25 职场文书
导游词之杭州岳王庙
2019/11/13 职场文书
mysql 获取相邻数据项
2022/05/11 MySQL