當(dāng)一臺(tái)計(jì)算機(jī)上有多個(gè)網(wǎng)卡時(shí),需要選擇對(duì)應(yīng)ip地址的網(wǎng)卡進(jìn)行發(fā)送數(shù)據(jù)包或者接受數(shù)據(jù)包。
1、選擇網(wǎng)卡發(fā)包(應(yīng)用scapy):
1
2
3
4
5
6
7
|
plface = conf.route.route( "××.××.××.××" )[ 0 ] #××.××.××.××為對(duì)應(yīng)網(wǎng)卡網(wǎng)絡(luò)中存在設(shè)備的ip地址。不能是需要發(fā)送數(shù)據(jù)包的網(wǎng)卡的ip地址(會(huì)報(bào)“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、選擇網(wǎng)卡進(jìn)行包的接收
1)如下方法,只能獲得一個(gè)網(wǎng)卡的ip地址(選擇哪個(gè)網(wǎng)卡,優(yōu)先級(jí)未知)
1
|
socket.getaddrinfo(socket.gethostname(),none)[ - 1 ][ 4 ][ 0 ] |
2)如下方法,可根據(jù)ip地址確定網(wǎng)卡:
1
2
3
|
host = socket.gethostbyname(socket.gethostname()) s = socket.socket(socket.af_inet,socket.sock_raw,socket.ipproto_ip) s.bind((host, 0 )) |
host可以直接用網(wǎng)卡ip地址代替,這樣就可以選擇網(wǎng)卡進(jìn)行包的接受了
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)服務(wù)器之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
原文鏈接:https://blog.csdn.net/hzliyaya/article/details/52045615