1. 程式人生 > >Python選擇網絡卡發包及接收資料包

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

    當一臺計算機上有多個網絡卡時,需要選擇對應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]

    2)如下方法,可根據ip地址確定網絡卡:

    HOST = socket.gethostbyname(socket.gethostname())
    s=socket.socket(socket.AF_INET,socket.SOCK_RAW,socket.IPPROTO_IP)
    s.bind((HOST,0))
    host可以直接用網絡卡ip地址代替,這樣就可以選擇網絡卡進行包的接受了