Python選擇網絡卡發包及接收資料報

2021-07-15 16:45:39 字數 716 閱讀 6534

當一台計算機上有多個網絡卡時,需要選擇對應ip位址的網絡卡進行傳送資料報或者接受資料報。

1、選擇網絡卡發包(應用scapy):

plface=conf.route.route("××.××.××.××")[0]

#××.××.××.××為對應網絡卡網路中存在裝置的ip位址。不能是需要傳送資料報的網絡卡的ip位址(會報「result too large」)

pkt=conf.l2socket(plface)

pack_ip,pack_udp,pack_ether=self.udp_pack()

t= str(pack_ether/pack_ip/pack_udp/udp_packdata)

udp_pack = ether(t)

pkt.send(udp_pack)

2、選擇網絡卡進行包的接收

1)如下方法,只能獲得乙個網絡卡的ip位址(選擇哪個網絡卡,優先順序未知)

socket.getaddrinfo(socket.gethostname(),none)[-1][4][0]

host = socket.gethostbyname(socket.gethostname())

s=socket.socket(socket.af_inet,socket.sock_raw,socket.ipproto_ip)

s.bind((host,0))

host可以直接用網絡卡ip位址代替,這樣就可以選擇網絡卡進行包的接受了

Python選擇網絡卡發包及接收資料報

當一台計算機上有多個網絡卡時,需要選擇對應ip位址的網絡卡進行傳送資料報或者接受資料報。1 選擇網絡卡發包 應用scapy plface conf.route.route 0 為對應網絡卡網路中存在裝置的ip位址。不能是需要傳送資料報的網絡卡的ip位址 會報 result too large pkt...

網絡卡如何接收資料報

ip報文可以看作乙個包。linux網絡卡驅動程式,將ip包新增14位元組的mac包頭,構成mac包。mac包中含有傳送端和接收端的mac位址資訊。既然是驅動程式建立的mac包頭資訊,當然可以隨便輸入位址資訊的,主機偽裝就是這麼實現的。驅動程式將mac包拷貝到網絡卡晶元內部的快取區,就算完事了。有網絡...

網絡卡傳送與接收資料報

網絡卡如何傳送資料報 ip報文可以看作乙個包。linux網絡卡驅動程式,將ip包新增14位元組的mac包頭,構成mac包。mac包中含有傳送端和接收端的mac位址資訊。既然是驅動程式建立的mac包頭資訊,當然可以隨便輸入位址資訊的。主機偽裝就是這麼實現的。驅動程式將mac包拷貝到網絡卡晶元內部的緩衝...