python網路程式設計 路徑MTU發現

2021-10-03 01:53:08 字數 1256 閱讀 7170

思路:

手動構造乙個指定大小的資料報,在ip首部設定強制不分片,根據返回的icmp差錯報文型別來判斷資料報大小是否超過mtu

如果返回資料報icmp層的type==3,code==4則表明資料報已經超過了mtu

如果返回資料報icmp層的type==0,code==0則表明資料報可以成功傳送,大小沒有超過mtu

在主函式中設定乙個迴圈遞減設定的資料報大小來探測mtu值

**:

import sys

import logging

logging.getlogger("scapy.runtime").setlevel(logging.error)#清除報錯

from scapy.all import *

def mtu_one(mtu,dst):

data = b'a'*(mtu-28)

result = sr1(ip(flags='df',dst=dst)/icmp()/data)

try:

if result.getlayer(icmp).type==3 and result.getlayer(icmp).code==4:

return 1

elif result.getlayer(icmp).type==0 and result.getlayer(icmp).code==0:

return 2

except:

return none

if __name__ == "__main__":

ipaddr = input('ip: ')

mtu = int(input('mtu: '))

while mtu > 0:

res = mtu_one(mtu,ipaddr)

if res==1:

mtu -= 1

elif res==2:

print('this way min mtu: %d' % mtu)

break

elif res==none:

print('目的不可達')

break

分析:

data = b'a'*(mtu-28),為什麼減28?頭部大小28+8位元組

測試:

python網路程式設計 TCP網路程式設計

tcp程式設計 客戶端 import socket 1 套接字 tcp socket socket.socket socket.af inet,socket.sock stream 2 建立鏈結 tcp socket.connect 172.27.35.1 8080 3 傳送資訊 tcp socke...

python 網路程式設計

今天晚上學習了一下python的網路程式設計,實現了client向server傳送資料,server反饋資訊 python 3.3 版本 server from socket import class tcpserver object def init self,serverport self.se...

python網路程式設計

網路通訊是計算機之間的程序之間的通訊。tcp程式設計 tcp連線建立是雙向通道,客戶端與服務端都可以給對方傳送資料。建立tcp連線時,主動發起連線的叫客戶端,被動響應連線的叫服務端。建立乙個tcp的socket連線 用socket family,type 建立套接字獲得socket物件。family...