如何修改报文的目的MAC地址?
我有一个与 Perl 中非常基本的事情相关的问题,但我无法找到有效的解决方案。
首先是一些背景信息。 我使用 Net::Pcap 等,当我在处理函数时数据包(由 pcap_loop
使用)我得到一个 $packet
标量,其中包含我的整个数据包(以太网标头 + ip 标头 + tcp/udp 标头 + 有效负载)。
我想要做的是更改此 $packet
(以太网目的地)的前 6 个字节,以获得可以使用 发送的
,使用用户定义的目标 MAC 地址(例如作为命令行参数传递等),例如 $packet
pcap_sendpacket00:11:22:33:44:55
。 因此,我可以分割用户定义的地址(例如使用 split
)来获取目标 mac 地址的每 6 个部分,并使用 hex
函数将其转换为十六进制,但是现在我想修改数据包的第一个字节,以将它们替换为这些十六进制字节。 我应该如何进行?
我想过使用一些串联(.),但我认为这个解决方案很脏。
用 C 思考(因为我前段时间用 C 做过,但我希望用 Perl 完成),一旦我得到了“u_char packet[]
”,我只需要做一个 <将用户提供的以太网地址的 code>memcpy 复制到 packet[]
的前 6 个字节,结果成功了。
I've a question related to a very basic thing in Perl, but I'm unable to find an efficient solution.
Here's a bit of context first. I use Net::Pcap etc and when I'm in my function which processes packets (used by pcap_loop
) I get a $packet
scalar which contains my whole packet (ethernet header + ip header + tcp/udp header + payload).
What I want to do is to change the first 6 bytes of this $packet
(the ethernet destination) in order to get a $packet
that I can send using pcap_sendpacket
, using a user defined destination mac address (for example passed as a command line argument or so), such as 00:11:22:33:44:55
. So I can split the user defined address (using split
for example) to get every 6 parts of the destination mac address, and convert it to hex using the hex
function, but now I want to modify the first bytes of my packet to replace them with these hex
ed bytes. How should I proceed ?
I thought using some concatenation (.) but I think that this solution is dirty.
Thinking in C (because I did it in C some time ago, but I want this to be done in Perl), Once I got my "u_char packet[]
", I just had to do a memcpy
of my user-supplied ethernet address to the 6 first bytes of my packet[]
and it worked.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
看一下
substr()
中的描述perldoc perlfunc
。 它有四参数形式,可以让您替换标量的一部分:所以像这样的东西应该适合您:
Have a look at the description of
substr()
inperldoc perlfunc
. It has four-parameter form that lets you replace parts of a scalar:So something like this should work for you:
vec
函数用于处理标量值作为位向量。The
vec
function is used to work with a scalar value as a bit vector.