كيفية إرسال الإطار الخام باستخدام بايثون
سؤال
لدي إطار إيثرنت خام أريد إرساله
كيف يجب أن أفعل ذلك؟حاولت إرسال قيم سداسية عشرية للإطار ولكني مازلت غير قادر على التحكم في رأس الحزمة التي تحتوي على عنوان ومنافذ src/dst
import socket
# the public network interface
HOST = socket.gethostbyname(socket.gethostname())
addr = ('46.165.204.237', 10000)
# create a raw socket and bind it to the public interface
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
s.bind((HOST, 0))
netpacket = '\xDE\xB0\x7B\xE5\xA7\xCD\x4C\x17\xEB\x07\x0D\xBC\x08\x00\x45\x00\x00\x92\x68\x94\x40\x00\x78\x06\xDC\x94\x2E\xA5\xCC\xED\xC0\xA8\x01\x02\x27\x10\x07\xC8\x04\xD7\xEA\xEA\xC3\x2A\x4E\xA2\x50\x18\x01\x02\x39\xB0\x00\x00\x3C\x3F\x78\x6D\x6C\x20\x76\x65\x72\x73\x69\x6F\x6E\x3D\x22\x31\x2E\x30\x22\x3F\x3E\x3C\x50\x61\x63\x6B\x65\x74\x3E\x3C\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E\x3E\x33\x3C\x2F\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E\x3E\x3C\x64\x61\x74\x61\x3E\x33\x24\x30\x24\x30\x24\x30\x24\x30\x24\x30\x3C\x2F\x64\x61\x74\x61\x3E\x3C\x65\x78\x74\x64\x61\x74\x61\x3E\x3C\x2F\x65\x78\x74\x64\x61\x74\x61\x3E\x3C\x2F\x50\x61\x63\x6B\x65\x74\x3E'
#netpaket = netpacket.encode('UTF-8')
s.sendto(netpacket.encode('UTF-8'), addr)
هل توجد في بايثون وظيفة مثل sendRaw() أو sendRawFrame()؟
أعلم أن scapy يمكنه التعامل مع هذا، لكني أحتاج إلى القيام بذلك عدة مرات، وفي كل مرة باستخدام بيانات الحمولة النافعة المختلفة.كيف يمكن أتمتة scapy؟أعني أن برنامج python النصي الذي يقوم بتشغيل scapy ينشئ حزمة بها بعض الحمولة ويرسلها.
scapy.py
packet1 = IP(dst='46.165.204.237')/TCP(sport=1992, dport=10000)/'<?xml version="1.0"?><Packet><operation>99</operation><data><![CDATA[8 fast]]></data><extdata><![CDATA[]]></extdata></Packet>.'
send(packet1)
الهدف منه هو إرسال حزمة من منفذ قيد الاستخدام بالفعل.إذا كان هناك حل أفضل لهذه المشكلة؟
خارج الموضوع:ربما يعرف شخص ما كيفية إرسال الحزم من خلال معرف المقبس المفتوح في النوافذ (ليس فقط في بيثون)؟
المحلول
يمكنك تزويد Scapy بمدخلات أولية باستخدام ملف Raw
طبقة.
netpacket = Raw('\xDE\xB0...')
لإرسال حزم على طبقة الإيثرنت - راجع وثائق ل sendp
.
sendp(netpacket, iface="eth1")