最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python基礎教程之獲取本機ip數據包示例

 更新時間:2014年02月10日 10:29:10   作者:  
本文主要介紹了python獲取本機ip數據包的示例,大家參考使用吧

這幾天用到了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 ):

即對應的圖:


從RFC和上圖中可以看到IP數據包頭各個字段所占的位數,我們可以根據這些定義去解析IP數據包頭,然后根據相應的策略處理數據。
這里給出一段用python實現的解析IP頭的代碼(呵呵,是demo中的代碼,只解析了前20個字節(jié)):

復制代碼 代碼如下:

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 ""

相關文章

  • pytest配置文件pytest.ini的具體使用

    pytest配置文件pytest.ini的具體使用

    本文主要介紹了pytest配置文件pytest.ini的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • Python多維/嵌套字典數據無限遍歷的實現

    Python多維/嵌套字典數據無限遍歷的實現

    下面小編就為大家?guī)硪黄狿ython多維/嵌套字典數據無限遍歷的實現。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • 使用python如何刪除同一文件夾下相似的圖片

    使用python如何刪除同一文件夾下相似的圖片

    這篇文章主要給大家介紹了關于利用python如何刪除同一文件夾下相似的圖片的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • 使用Python對Syslog信息進行分析并繪圖的實現

    使用Python對Syslog信息進行分析并繪圖的實現

    這篇文章主要介紹了使用Python對Syslog信息進行分析并繪圖的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • python反轉一個三位整數的多種實現方案

    python反轉一個三位整數的多種實現方案

    這篇文章主要介紹了python反轉一個三位整數的多種實現方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python繪圖中的?四個繪圖技巧

    python繪圖中的?四個繪圖技巧

    在可視化數據時,通常需要在單個圖形中繪制多個圖形。?例如,如果您想從不同的角度可視化相同的變量如:數字變量的并排直方圖和箱線圖,則多個圖形很有用。?在這篇文章中,我分享了繪制多個圖形的?4?個簡單但實用的技巧,具有一定的參考價值,需要的小伙伴可以參考一下
    2021-12-12
  • Python實現孤立隨機森林算法的示例代碼

    Python實現孤立隨機森林算法的示例代碼

    孤立森林(isolation?Forest)是一種高效的異常檢測算法,它和隨機森林類似,但每次選擇劃分屬性和劃分點(值)時都是隨機的,而不是根據信息增益或基尼指數來選擇。本文將用Python實現這一算法,需要的可以參考一下
    2022-03-03
  • 淺析python 定時拆分備份 nginx 日志的方法

    淺析python 定時拆分備份 nginx 日志的方法

    本文給大家分享python 定時拆分備份 nginx 日志的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-04-04
  • Python算法之圖的遍歷

    Python算法之圖的遍歷

    這篇文章主要介紹了Python算法之圖的遍歷,涉及遍歷算法BFS和DFS,以及尋找圖的(強)連通分量的算法等相關內容,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Python三級目錄展示的實現方法

    Python三級目錄展示的實現方法

    這篇文章主要介紹了Python三級目錄展示的實現方法的相關資料,本文通過圖文并茂的方式給大家介紹,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09

最新評論

泽普县| 靖安县| 大庆市| 镇康县| 长治县| 搜索| 隆尧县| 霍城县| 曲阳县| 礼泉县| 墨脱县| 舟曲县| 都兰县| 邹平县| 湖州市| 甘泉县| 闽清县| 大港区| 南昌市| 从化市| 东丰县| 安丘市| 汕头市| 洛南县| 广西| 凤阳县| 来凤县| 特克斯县| 德钦县| 布拖县| 门源| 太仆寺旗| 迭部县| 房产| 兰考县| 布尔津县| 莲花县| 平乡县| 同心县| 海丰县| 普格县|