當一台計算機上有多個網絡卡時,需要選擇對應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包拷貝到網絡卡晶元內部的緩衝...