日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

python使用原始套接字發(fā)送二層包(鏈路層幀)的方法

系統(tǒng) 1759 0

發(fā)送端代碼:

            
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import socket
import struct

raw_socket = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(0x1234))
raw_socket.bind(("eth0", 0))
packet = struct.pack("!6s6sH", "\xff\xff\xff\xff\xff\xff", "\xaa\xaa\xaa\xaa\xaa\xaa", 0x1234)
while True:
 print repr(packet)
 raw_socket.send(packet + "hello,world!")

          

1.創(chuàng)建套接字使用地址家族PF_PACKET,類型為SOCK_RAW,自定義類型為0x1234,這個(gè)和C語言一模一樣。自定義類型我們也可以使用0X0800,這個(gè)是ETH_P_IP,相當(dāng)于我們模擬ip包來發(fā)送,那么ip包頭和mac包頭都需要我們自己填寫。現(xiàn)在我們使用0x1234,系統(tǒng)定義之外的協(xié)議類型。

2.由于是發(fā)送二層包,我們默認(rèn)網(wǎng)卡沒有配置網(wǎng)絡(luò),也就是ping不通的情況下,直接綁定網(wǎng)卡上。

3.linux內(nèi)核中定義的mac包頭結(jié)構(gòu)

            
struct ethhdr
{
 unsigned char h_dest[6];
 unsigned char h_source[6];
 uint16_t h_proto; //0x1234
};

          

第一個(gè)是目的mac地址,第二個(gè)是本機(jī)mac地址,第三個(gè)是自定義類型必須填寫,這樣對(duì)方也關(guān)心這個(gè)自定義類型時(shí),協(xié)議棧收到二層包才能正確給到對(duì)方的套接字。通過這個(gè)結(jié)構(gòu)體,所以使用了pack,”!6s6sH”。我這里使用的廣播地址發(fā)送。
接收端代碼:

            
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import socket
import struct

raw_socket = socket.socket(socket.PF_PACKET,socket.SOCK_RAW,socket.htons(0x1234))
while True :
 packet = raw_socket.recv(1024)
 data = struct.unpack("!6s6sH12s", packet)
 print repr(data[0])
 print repr(data[1])
 print repr(data[2])
 print repr(data[3])


          

以上這篇python使用原始套接字發(fā)送二層包(鏈路層幀)的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 张家港市| 杨浦区| 台前县| 淮阳县| 昌平区| 承德市| 临武县| 龙胜| 上林县| 赤城县| 塔城市| 昌吉市| 巫山县| 托里县| 乌什县| 朝阳县| 普定县| 临泉县| 三穗县| 信阳市| 尉犁县| 丰镇市| 屯昌县| 乌海市| 雷州市| 汶上县| 钟山县| 明星| 丹东市| 穆棱市| 诏安县| 云梦县| 钟山县| 明光市| 胶南市| 稻城县| 资阳市| 新密市| 上杭县| 平武县| 沙洋县|