python基础教程之获取本机ip数据包示例


Posted in Python onFebruary 10, 2014

这几天用到了raw socket,用python写了些demo程序,这里记录下。

首先我们看一个简单的sniffer程序:

#! /usr/bin/python
# code for linux
import socket
#s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_UDP)
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
while True:
    print s.recvfrom(65535)

这里直接用raw socket接收数据,直接print操作。这个就几行代码,也没什么好解释的了,不懂的google下。

得到IP数据包后,接下来的工作就是对IP头进行解析,在这之前,我们先看看RFC中是怎么定义的(RFC791 : http://www.ietf.org/rfc/rfc791.txt ):

python基础教程之获取本机ip数据包示例

即对应的图:

python基础教程之获取本机ip数据包示例

从RFC和上图中可以看到IP数据包头各个字段所占的位数,我们可以根据这些定义去解析IP数据包头,然后根据相应的策略处理数据。
这里给出一段用python实现的解析IP头的代码(呵呵,是demo中的代码,只解析了前20个字节):

def decodeIpHeader(packet):
        mapRet = {}
        mapRet["version"] = (int(ord(packet[0])) & 0xF0)>>4
        mapRet["headerLen"] = (int(ord(packet[0])) & 0x0F)<<2
        mapRet["serviceType"] = hex(int(ord(packet[1])))
        mapRet["totalLen"] = (int(ord(packet[2])<<8))+(int(ord(packet[3])))
        mapRet["identification"] = (int( ord(packet[4])>>8 )) + (int( ord(packet[5])))
        mapRet["id"] = int(ord(packet[6]) & 0xE0)>>5
        mapRet["fragOff"] = int(ord(packet[6]) & 0x1F)<<8 + int(ord(packet[7]))
        mapRet["ttl"] = int(ord(packet[8]))
        mapRet["protocol"] = int(ord(packet[9]))
        mapRet["checkSum"] = int(ord(packet[10])<<8)+int(ord(packet[11]))
        mapRet["srcaddr"] = "%d.%d.%d.%d" % (int(ord(packet[12])),int(ord(packet[13])),int(ord(packet[14])), int(ord(packet[15])))
        mapRet["dstaddr"] = "%d.%d.%d.%d" % (int(ord(packet[16])),int(ord(packet[17])),int(ord(packet[18])), int(ord(packet[19])))
        return mapRet

调用代码:

proto = socket.getprotobyname('tcp') # only tcp
sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, proto)
while True:
        packet = sock.recvfrom(65535)[0]
        if len(packet) == 0:
                sck.close()
        else:
                #print str(packet)
                mapIpTmp = decodeIpHeader(packet)
                for k,v in mapIpTmp.items():
                        print k,"\t:\t",v
        print ""
Python 相关文章推荐
python的几种开发工具介绍
Mar 07 Python
Python contextlib模块使用示例
Feb 18 Python
Python自动连接ssh的方法
Mar 07 Python
Python实用日期时间处理方法汇总
May 09 Python
python制作websocket服务器实例分享
Nov 20 Python
浅谈Python处理PDF的方法
Nov 10 Python
如何在Django项目中引入静态文件
Jul 26 Python
python画蝴蝶曲线图的实例
Nov 21 Python
Windows下实现将Pascal VOC转化为TFRecords
Feb 17 Python
python numpy库np.percentile用法说明
Jun 08 Python
python 下载文件的几种方式分享
Apr 07 Python
python实战之用emoji表情生成文字
May 08 Python
python基础教程之udp端口扫描
Feb 10 #Python
python网页请求urllib2模块简单封装代码
Feb 07 #Python
python解析xml模块封装代码
Feb 07 #Python
python 解析XML python模块xml.dom解析xml实例代码
Feb 07 #Python
python合并文本文件示例
Feb 07 #Python
python实现哈希表
Feb 07 #Python
python处理cookie详解
Feb 07 #Python
You might like
php 分页原理详解
2009/08/21 PHP
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
2020/04/13 PHP
鼠标图片振动代码
2006/07/06 Javascript
用js实现键盘方向键翻页功能的代码
2007/06/03 Javascript
JQuery1.6 使用方法三
2011/11/23 Javascript
JS子父窗口互相操作取值赋值的方法介绍
2013/05/11 Javascript
SWFObject基本用法实例分析
2015/07/20 Javascript
Angularjs中如何使用filterFilter函数过滤
2016/02/06 Javascript
BootStrapTable服务器分页实例解析
2016/12/20 Javascript
Javascript DOM事件操作小结(监听鼠标点击、释放,悬停、离开等)
2017/01/20 Javascript
VueJs组件之父子通讯的方式
2018/05/06 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
vue data有值,但是页面{{}} 取不到值的解决
2020/11/09 Javascript
swiper实现导航滚动效果
2020/12/13 Javascript
[02:21]DOTA2英雄基础教程 蝙蝠骑士
2013/12/16 DOTA
python利用高阶函数实现剪枝函数
2018/03/20 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
2018/08/02 Python
Python实现的连接mssql数据库操作示例
2018/08/17 Python
Python将主机名转换为IP地址的方法
2019/08/14 Python
Python 下载及安装详细步骤
2019/11/04 Python
浅谈PyQt5中异步刷新UI和Python多线程总结
2019/12/13 Python
python列表生成器迭代器实例解析
2019/12/19 Python
Pytorch中实现只导入部分模型参数的方式
2020/01/02 Python
基于Pytorch SSD模型分析
2020/02/18 Python
Python如何把十进制数转换成ip地址
2020/05/25 Python
python 中的命名空间,你真的了解吗?
2020/08/19 Python
Python实现敏感词过滤的4种方法
2020/09/12 Python
css3 position fixed固定居中问题解决方案
2014/08/19 HTML / CSS
美国婚礼装饰和活动用品批发供应商:Event Decor Direct
2018/10/12 全球购物
交通文明倡议书
2014/05/16 职场文书
工资收入证明样本(5篇)
2014/09/16 职场文书
解除劳动合同协议书(样本)
2014/10/02 职场文书
工伤事故证明
2014/10/20 职场文书
公司财务部岗位职责
2015/04/14 职场文书
2015年中秋节主持词
2015/07/30 职场文书