python socket 编程 (看python黑帽编程4.1做的笔记)

原文链接python黑帽编程4.1 Sniffer嗅探器

通过 ifconfig eth1 promisc 设置网卡为混杂模式

创建socket对象、接收数据、分析数据

import o
import socket
import ctypes
#PromiscuousSocket这个类负责创建一个绑定到当前主机名绑定的网卡上的raw socket对象,并设置启动混杂模式。
class PromiscuousSocket (object):
#__init__()用来创建socket对象,并绑定到对象的s字段上
    def __init__(self):
        pass
    def __enter__(self):
        pass
    def __exit__(self,*args,**kwargs):
        pass
#sniffer创建PromiscuousSocket类实例,并使用这个实例接收和分析数据
def sniffer(count,buffersize=65565,showPort=False,showRawData=False):
    pass
#printPacket用来显示补获的内容
def printPacket(package,showPort,showRawData):
    pass
sniffer(count=10,showPort=True,showRawData=True)

def __init__(self):
    HOST=socket.gethostbyname(socket.gethostname())
    s=socket.socket(socket.AF_INET,socket.SOCKET_RAW,
    socket.IPPROTO_IP)
#socket.AF_INET---表示ipv4;socket.RAW---表示原始套接字
#setsocketopt用来对socket对象进行补充选项的设置,三个选项分别是level、选项名称、和值
    s=setsocketopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    s.bind((HOST,0))
    #保护IP头部
        s.setsocketopt(socket.IPPROTO_IP,socket.IP_HDRINCL,1)
    #设置混杂模式
    s.ioctl(socket.SIO_RCVALL,socket.RCVALL_ON)
    self.s=s
def __enter__(self):
    return self.s
    #返回创建的socket对象
def __exit__(self,*args,**kwargs):
    self.s.ioctl(socket.SIO_RCVALL,socket.RCVALL_OFF)
    #关闭混杂模式

#接收数据包,打印基本信息
def sniffer(count,buffersize=65565,showPort=False,showRawData=False):
    with PromiscuousSocket() as s:
        for i in range(count):
            package=s.recvfrom(buffSize)
            printPacket(package,showPort,showRawData)

def printPacket(pacage,showPort,showRawData):
    dataIndex=0
    headerIndex=1
    ipAddressIndex=0
    portIndex=1
    print 'IP:',pacage[headerIndex][ipAddressIndex,end='']
    if(showPort):
        print ('Port:',pacage[headerIndex][portIndex,end='')
    if(showRawData):
        print ('data:',pacage[dataIndex])
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值