91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python如何使用原始套接字發送二層包

發布時間:2021-03-30 09:45:10 來源:億速云 閱讀:306 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關python如何使用原始套接字發送二層包的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

發送端代碼:

#!/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.創建套接字使用地址家族PF_PACKET,類型為SOCK_RAW,自定義類型為0x1234,這個和C語言一模一樣。自定義類型我們也可以使用0X0800,這個是ETH_P_IP,相當于我們模擬ip包來發送,那么ip包頭和mac包頭都需要我們自己填寫。現在我們使用0x1234,系統定義之外的協議類型。

2.由于是發送二層包,我們默認網卡沒有配置網絡,也就是ping不通的情況下,直接綁定網卡上。

3.linux內核中定義的mac包頭結構

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

第一個是目的mac地址,第二個是本機mac地址,第三個是自定義類型必須填寫,這樣對方也關心這個自定義類型時,協議棧收到二層包才能正確給到對方的套接字。通過這個結構體,所以使用了pack,”!6s6sH”。我這里使用的廣播地址發送。
接收端代碼:

#!/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如何使用原始套接字發送二層包”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巴彦县| 黄平县| 黔南| 集安市| 马关县| 顺平县| 建始县| 鄂伦春自治旗| 巩义市| 会昌县| 河间市| 拜城县| 卢龙县| 天津市| 正阳县| 张家口市| 灵宝市| 汶川县| 霍林郭勒市| 阿合奇县| 黑龙江省| 哈密市| 长治县| 临桂县| 平远县| 县级市| 夏河县| 天祝| 五台县| 嫩江县| 湖口县| 靖江市| 凤城市| 嘉义县| 惠东县| 万年县| 武邑县| 新竹县| 柳州市| 河津市| 南宁市|