什么是有效且有意義的值SO_MARK?我發現一些專案使用int,一些unsigned int(dnsmasq):
unsigned int mark;
if (get_incoming_mark(&forward->frec_src.source, &forward->frec_src.dest, 0, &mark))
setsockopt(fd, SOL_SOCKET, SO_MARK, &mark, sizeof(unsigned int));
我想使用unsigned int是正確的(因此這個 PRping可能是正確的:https : //github.com/iputils/iputils/pull/345)。但是ping允許用戶指定SO_MARK,因此我還想添加對有效輸入的檢查。
另外,我可以SO_MARK在wireshark/tcpdump 輸出中看到設定嗎?
uj5u.com熱心網友回復:
struct sock內核用于套接字的結構將欄位設定SO_MARK為:__u32 sk_mark。所以我會說 anyuint32_t是這個選項的一個有意義的值。
另外,我可以
SO_MARK在wireshark/tcpdump 輸出中看到設定嗎?
AFAIK 不,mark實際上并沒有在資料包上設定(在任何層),它只是在用于管理套接字 ( struct sock) 和資料包控制資訊 ( struct sk_buff) 的內部內核結構上設定。你不會在“電線上”看到它。
但是,您可以使用iptables將標記的資料包記錄到 dmesg,就像Unix & Linux SE 上的這個答案建議的那樣:
$ sudo iptables -A INPUT -m mark ! --mark 0 -m limit --limit 8/min --limit-burst 12 -j LOG --log-prefix "IPTables-Marks: "
$ ./send-some-marked-packets ...
$ sudo dmesg
...
[27448.839237] IPTables-Marks: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=31 TOS=0x00 PREC=0x00 TTL=64 ID=45988 DF PROTO=UDP SPT=40656 DPT=12345 LEN=11 MARK=0xcc
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/353642.html
