python使用原始套接字發(fā)送二層包(鏈路層幀)的方法
發(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,類(lèi)型為SOCK_RAW,自定義類(lèi)型為0x1234,這個(gè)和C語(yǔ)言一模一樣。自定義類(lèi)型我們也可以使用0X0800,這個(gè)是ETH_P_IP,相當(dāng)于我們模擬ip包來(lái)發(fā)送,那么ip包頭和mac包頭都需要我們自己填寫(xiě)。現(xiàn)在我們使用0x1234,系統(tǒng)定義之外的協(xié)議類(lèi)型。
2.由于是發(fā)送二層包,我們默認(rèn)網(wǎng)卡沒(méi)有配置網(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è)是自定義類(lèi)型必須填寫(xiě),這樣對(duì)方也關(guān)心這個(gè)自定義類(lèi)型時(shí),協(xié)議棧收到二層包才能正確給到對(duì)方的套接字。通過(guò)這個(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ā)送二層包(鏈路層幀)的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
CentOS 7下安裝Python 3.5并與Python2.7兼容并存詳解
這篇文章主要給大家介紹了在CentOS 7下安裝Python 3.5并與Python2.7兼容并存的相關(guān)資料,文中將安裝步驟介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-07-07
pytorch張量和numpy數(shù)組相互轉(zhuǎn)換
在使用pytorch作為深度學(xué)習(xí)的框架時(shí),經(jīng)常會(huì)遇到張量tensor和矩陣numpy的類(lèi)型的相互轉(zhuǎn)化的問(wèn)題,本文主要介紹了pytorch張量和numpy數(shù)組相互轉(zhuǎn)換,感興趣的可以了解一下2024-02-02
Python設(shè)計(jì)模式中的結(jié)構(gòu)型適配器模式
這篇文章主要介紹了Python設(shè)計(jì)中的結(jié)構(gòu)型適配器模式,適配器模式即Adapter?Pattern,將一個(gè)類(lèi)的接口轉(zhuǎn)換成為客戶(hù)希望的另外一個(gè)接口,下文內(nèi)容具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-02-02
關(guān)于反爬蟲(chóng)的一些簡(jiǎn)單總結(jié)
這篇文章主要介紹了關(guān)于反爬蟲(chóng)的一些簡(jiǎn)單總結(jié),具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12
python溫度轉(zhuǎn)換華氏溫度實(shí)現(xiàn)代碼
這篇文章主要介紹了python溫度轉(zhuǎn)換華氏溫度實(shí)現(xiàn)代碼內(nèi)容,有需要的朋友們可以測(cè)試下。2020-12-12
python實(shí)現(xiàn)生命游戲的示例代碼(Game of Life)
這篇文章主要介紹了python實(shí)現(xiàn)生命游戲的示例代碼(Game of Life),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
python json.dumps中文亂碼問(wèn)題解決
這篇文章主要介紹了python json.dumps中文亂碼問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04

