【问题标题】:how to set tcp options (MSS value) in Net::RawIP如何在 Net::RawIP 中设置 tcp 选项(MSS 值)
【发布时间】:2015-03-15 22:55:54
【问题描述】:

在使用 Net::RawIP 时,我可以将最大段大小设置为某个值吗?

我正在尝试以下代码,但不知道如何将 TCP 选项中的 MSS 值设置为自定义值。

#!/usr/bin/perl

use Net::RawIP;

$packet = new Net::RawIP;

$packet->set({
    ip  => {
        saddr => '192.168.122.128',
        daddr => '192.168.122.1'
    },
    tcp => { source => 2323,
        dest    => 8080,
        syn     => 1,
        seq     => 100,
        ack_seq => 0,
        data    => 'hello world'
    }
});

$packet->optset(tcp => { type => [ (2) ], data => [ (10) ] });

$packet->send(0, 1); 

【问题讨论】:

    标签: perl sockets tcp


    【解决方案1】:

    根据documentation

    optset(OPTPROTO => { type => [...],data => [...] },...)

    [...] 数据的值也是一个数组引用。这个数组必须用 strings 填充,它必须包含选项中的所有字节,除了具有选项类型和长度的字节。

    (强调)

    您正在传递对整数数组的引用;您需要传递对字符串数组的引用。试试这样的:

    $packet->optset( tcp => { type => [ 2 ], data => [ "\x00\x0A" ] } );
    

    The length of the maximum segment size field is 4,其中包括一个字节的种类字段,一个字节的长度字段,以及两个字节的数据本身,所以你需要像上面一样传递一个两字节的字符串。

    【讨论】:

    • 谢谢...似乎必须将数据作为 ASCII 传递以设置 MSS 值,否则它将超过最大字节数。有没有办法可以使用十进制或十六进制?
    • @user2896215 0x000A 十六进制。您遇到的具体问题是什么?
    • @user2896215 啊,看看源代码我想我明白你在说什么(我现在没有可以测试的机器):试试data => [ "\x00\x0A" ]。我不明白optset 想要二进制字符串(字节字符串)。
    猜你喜欢
    • 2014-01-10
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 2010-10-28
    • 2020-05-29
    • 2012-08-31
    相关资源
    最近更新 更多