-f和-A of ss有什么区别?
-f和-A中哪一个与-t, -u, -4, -6, -w, -x有关?
-A inet,packet是否意味着-A tcp,udp,raw?
我知道一些套接字概念,但无法理解手册中的术语。
谢谢。
-f显示家庭类型的套接字。目前支持的家庭有: unix,inet,inet6,link,netlink。要转储的套接字表的-A查询列表,用逗号分隔。可以理解以下标识符: all、inet、tcp、udp、raw、unix、packet、netlink、unix_dgram、unix_stream、unix_seqpacket、packet_raw、packet_dgram。
发布于 2019-03-23 01:32:01
-4, -6, -x -按手册页。
-t,-u,-w --所有这些都对应于套接字表。
-A inet,packet是否意味着-A tcp,udp,raw?
表inet包含所有的tcp、udp、raw,以及大概还包括dccp和sctp。我假设all在某种程度上是合成的,所以我假设inet是类似的。
我注意到当指定重叠的“套接字表”值时,例如-A tcp,inet、ss不显示重复值。
我认为-A packet和-A raw是不相交的。所以我认为-A inet,packet应该比-A tcp,udp,raw更严格地展示.
提防
-A raw和-A packet看起来像是在做相关的事情,但是它们之间有一些实际的区别。ss目前将所有数据包套接字视为侦听套接字,*但是(大多数?)如果传递了-l选项,则显示原始套接字,如果未传递-l选项,则显示原始套接字。通常使用的原始和包套接字不多。如果您看看这个,并且决定您甚至不想在这里信任-l,您可以使用ss -a -A raw,packet列出所有原始的和包的套接字。
更奇怪的是,ss无法确定raw表中的数据包是否属于link地址家族,是否:
# ss -A raw -p
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 0.0.0.0:ipproto-255 0.0.0.0:* users:(("atop",pid=26422,fd=4))
UNCONN 0 0 *:ipv6-icmp *:* users:(("NetworkManager",pid=1317,fd=17))
# ss -f link -p
Netid Recv-Q Send-Q Local Address:Port Peer Address:Port
p_raw 0 0 *:wlp2s0 * users:(("dhclient",pid=20548,fd=5))
p_dgr 0 0 [34958]:wlp2s0 * users:(("wpa_supplicant",pid=1406,fd=13))
p_dgr 0 0 [0]:* * users:(("wpa_supplicant",pid=1406,fd=16))
p_dgr 0 0 [0]:* * users:(("wpa_supplicant",pid=1406,fd=12))
# ss -A raw -f link -p
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
??? UNCONN 0 0 0.0.0.0:ipproto-255 0.0.0.0:* users:(("atop",pid=26422,fd=4))
icmp6 UNCONN 0 0 *:ipv6-icmp *:* users:(("NetworkManager",pid=1317,fd=17)) 同样,它似乎无法决定这两个选项是否与AND或OR相结合。ss -A all -f link提供与ss -A all相同的输出。但是ss -A raw -f link给出的行数比ss -f link少。
此外,link地址家族的概念似乎是ss特有的。Linux没有AF_LINK,它有AF_PACKET。
名称“套接字表”听起来像是指内核中的本机表。因此,准确地列出tcp套接字是非常有效的--例如,我们只列出整个表。
但是,我可以看到旧的纯文本/proc接口列在旧的man netstat中.而且这些表不完全匹配,例如,tcp和tcp6有单独的表。嗯。
实际情况是内核哈希表是针对inet6的,然后是inet6的另一个表.我真的不能理解ss“套接字表”v.s. sock_diag,它似乎是由ss组成的。
man ss中提到的筛选器表达式之类的选项可能比它们需要扫描的表的大小要少得多。从这个意义上说,它们可能比转储内核返回的整个列表的效率更低。
我认为我们不太可能需要担心效率。
*证明:strace表明,当您要求ss在不传递-l的情况下列出数据包套接字时,它什么也不做:
$ strace -f -e '!mprotect,mmap,read,write,lseek' ss -A packet
...
openat(AT_FDCWD, "/lib64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=258624, ...}) = 0
mmap(NULL, 136384, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fbffcade000
mmap(0x7fbffcae4000, 65536, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6000) = 0x7fbffcae4000
mmap(0x7fbffcaf4000, 24576, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16000) = 0x7fbffcaf4000
mmap(0x7fbffcafa000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b000) = 0x7fbffcafa000
mmap(0x7fbffcafc000, 13504, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fbffcafc000
close(3) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbffcadc000
arch_prctl(ARCH_SET_FS, 0x7fbffcadce40) = 0
munmap(0x7fbffcdc7000, 199180) = 0
set_tid_address(0x7fbffcadd110) = 2588
set_robust_list(0x7fbffcadd120, 24) = 0
rt_sigaction(SIGRTMIN, {sa_handler=0x7fbffcae4c50, sa_mask=[], sa_flags=SA_RESTORER|SA_SIGINFO, sa_restorer=0x7fbffcaf1030}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {sa_handler=0x7fbffcae4ce0, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART|SA_SIGINFO, sa_restorer=0x7fbffcaf1030}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
statfs("/sys/fs/selinux", {f_type=SELINUX_MAGIC, f_bsize=4096, f_blocks=0, f_bfree=0, f_bavail=0, f_files=0, f_ffree=0, f_fsid={val=[0, 0]}, f_namelen=255, f_frsize=4096, f_flags=ST_VALID|ST_RELATIME}) = 0
statfs("/sys/fs/selinux", {f_type=SELINUX_MAGIC, f_bsize=4096, f_blocks=0, f_bfree=0, f_bavail=0, f_files=0, f_ffree=0, f_fsid={val=[0, 0]}, f_namelen=255, f_frsize=4096, f_flags=ST_VALID|ST_RELATIME}) = 0
brk(NULL) = 0x563e25ce6000
brk(0x563e25d07000) = 0x563e25d07000
access("/etc/selinux/config", F_OK) = 0
mmap(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbffc9db000
ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, TIOCGWINSZ, {ws_row=35, ws_col=150, ws_xpixel=0, ws_ypixel=0}) = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0), ...}) = 0
[ss output starts here]
State Recv-Q Send-Q Local Address:Port Peer Address:Port
[ss output ends]
munmap(0x7fbffc9db000, 1052672) = 0
exit_group(0) = ?https://unix.stackexchange.com/questions/508098
复制相似问题