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结合API实现即时天气信息
Jan 19 Python
python基础教程之五种数据类型详解
Jan 12 Python
TensorFlow安装及jupyter notebook配置方法
Sep 08 Python
Python3简单实例计算同花的概率代码
Dec 06 Python
python list删除元素时要注意的坑点分享
Apr 18 Python
python爬虫之模拟登陆csdn的实例代码
May 18 Python
mac 安装python网络请求包requests方法
Jun 13 Python
总结Python图形用户界面和游戏开发知识点
May 22 Python
python中pip的使用和修改下载源的方法
Jul 08 Python
python读文件的步骤
Oct 08 Python
Jupyter加载文件的实现方法
Apr 14 Python
解决python虚拟环境切换无效的问题
Apr 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
第九节 绑定 [9]
2006/10/09 PHP
PHP文件大小格式化函数合集
2014/03/10 PHP
php获取手机端的号码以及ip地址实例代码
2018/09/12 PHP
jquery.validate使用攻略 第一部
2010/07/01 Javascript
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
2010/12/25 Javascript
js日历功能对象
2012/01/12 Javascript
Js实现当前点击a标签变色突出显示其他a标签回复原色
2013/11/27 Javascript
node.js中的path.resolve方法使用说明
2014/12/08 Javascript
js运动动画的八个知识点
2015/03/12 Javascript
JavaScript访问字符串中单个字符的两种方法
2015/07/03 Javascript
ES6解构赋值实例详解
2017/10/31 Javascript
详解JavaScript中的数组合并方法和对象合并方法
2018/05/11 Javascript
vue2.0使用v-for循环制作多级嵌套菜单栏
2018/06/25 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
js实现弹出框的拖拽效果实例代码详解
2019/04/16 Javascript
JavaScript switch语句使用方法简介
2019/12/30 Javascript
js实现聊天对话框
2020/02/08 Javascript
JS+CSS+HTML实现“代码雨”类似黑客帝国文字下落效果
2020/03/17 Javascript
[02:59]DOTA2完美大师赛主赛事第三日精彩集锦
2017/11/25 DOTA
python中的yield使用方法
2014/02/11 Python
python通过定义一个类实例作为ftp回调方法
2015/05/04 Python
Python+Opencv识别两张相似图片
2020/03/23 Python
浅谈python中scipy.misc.logsumexp函数的运用场景
2016/06/23 Python
Python中实现switch功能实例解析
2018/01/11 Python
Python实现获取前100组勾股数的方法示例
2018/05/04 Python
浅谈Series和DataFrame中的sort_index方法
2018/06/07 Python
如何基于windows实现python定时爬虫
2020/05/01 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
2020/05/11 Python
基于Python把网站域名解析成ip地址
2020/05/25 Python
Yahoo-PHP面试题2
2014/12/06 面试题
英文自荐信
2013/12/19 职场文书
后勤部经理岗位职责
2014/02/23 职场文书
公共场所标语
2014/06/30 职场文书
补充协议书
2015/01/28 职场文书
教师继续教育反思周记
2015/06/25 职场文书
Pytorch中使用ImageFolder读取数据集时忽略特定文件
2022/03/23 Python