Could not connect to wpa_supplicant: p2p-dev-wlan0 - re-trying

本文记录了一次使用wpa_cli连接wpa_supplicant失败的经历,通过strace命令追踪到失败原因是由于wlan0接口的执行权限问题导致。通过调整wlan0的权限设置解决了这一问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用 wpa_cli 连接 wpa_supplicant 的时候,尝试几次都是连接不上,显示结果:

Could not connect to wpa_supplicant: p2p-dev-wlan0 - re-trying

 

上网查了一下,可以使用 strace 把执行过程的信息打出来, 执行命令 strace wpa_cli -i wlan0

查阅了:http://www.itkeyword.com/doc/2288722981583974x739/could-not-connect-to-wpa-supplicant-wlan0-re-trying

执行结果如下(表1),查看后发现如下一行信息 

connect(3, {sa_family=AF_UNIX, sun_path="/var/run/wpa_supplicant/wlan0"}, 110) = -1 EACCES (Permission denied)

发现 wlan0 没有执行权限,因为我用的是 pi 用户去执行 wpa_cli ,而这个过程中需要用到的 wlan0 只有 root用户和 root组才有执行权限,修改 wlan0 的执行权限(见:图3),

重新执行命令 wpa_cli 现在可以连接上 wpa_supplicant (图4)

图3:

图4:

表1:

execve("/sbin/wpa_cli", ["wpa_cli", "-i", "wlan0"], [/* 43 vars */]) = 0
brk(NULL)                               = 0xf68000
uname({sysname="Linux", nodename="raspberrypi_22", ...}) = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap2(NULL, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x76f52000
access("/etc/ld.so.preload", R_OK)      = 0
open("/etc/ld.so.preload", O_RDONLY|O_CLOEXEC) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=42, ...}) = 0
mmap2(NULL, 42, PROT_READ|PROT_WRITE, MAP_PRIVATE, 3, 0) = 0x76f51000
close(3)                                = 0
open("/usr/lib/arm-linux-gnueabihf/libarmmem.so", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\210\5\0\0004\0\0\0"..., 512) = 512
lseek(3, 20868, SEEK_SET)               = 20868
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1000) = 1000
lseek(3, 20540, SEEK_SET)               = 20540
read(3, "A,\0\0\0aeabi\0\1\"\0\0\0\0056\0\6\6\10\1\t\1\n\3\f\1\22\4\24"..., 45) = 45
fstat64(3, {st_mode=S_IFREG|0644, st_size=21868, ...}) = 0
mmap2(NULL, 86080, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x76f0f000
mprotect(0x76f14000, 61440, PROT_NONE)  = 0
mmap2(0x76f23000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x4000) = 0x76f23000
close(3)                                = 0
munmap(0x76f51000, 42)                  = 0
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=86371, ...}) = 0
mmap2(NULL, 86371, PROT_READ, MAP_PRIVATE, 3, 0) = 0x76ef9000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/librt.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\3\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0 \27\0\0004\0\0\0"..., 512) = 512
lseek(3, 25352, SEEK_SET)               = 25352
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1280) = 1280
lseek(3, 24940, SEEK_SET)               = 24940
read(3, "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\23\1\24"..., 47) = 47
fstat64(3, {st_mode=S_IFREG|0644, st_size=26632, ...}) = 0
mmap2(NULL, 90640, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x76ee2000
mprotect(0x76ee8000, 61440, PROT_NONE)  = 0
mmap2(0x76ef7000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x5000) = 0x76ef7000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/libreadline.so.7", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\354\323\0\0004\0\0\0"..., 512) = 512
lseek(3, 239016, SEEK_SET)              = 239016
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1040) = 1040
lseek(3, 238680, SEEK_SET)              = 238680
read(3, "A,\0\0\0aeabi\0\1\"\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 45) = 45
fstat64(3, {st_mode=S_IFREG|0644, st_size=240056, ...}) = 0
mmap2(NULL, 309004, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x76e96000
mprotect(0x76ecc000, 65536, PROT_NONE)  = 0
mmap2(0x76edc000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x36000) = 0x76edc000
mmap2(0x76ee1000, 1804, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x76ee1000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0@h\1\0004\0\0\0"..., 512) = 512
lseek(3, 1231820, SEEK_SET)             = 1231820
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 2880) = 2880
lseek(3, 1228284, SEEK_SET)             = 1228284
read(3, "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\23\1\24"..., 47) = 47
fstat64(3, {st_mode=S_IFREG|0755, st_size=1234700, ...}) = 0
mmap2(NULL, 1303872, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x76d57000
mprotect(0x76e80000, 65536, PROT_NONE)  = 0
mmap2(0x76e90000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x129000) = 0x76e90000
mmap2(0x76e93000, 9536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x76e93000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\3\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0dI\0\0004\0\0\0"..., 512) = 512
lseek(3, 125740, SEEK_SET)              = 125740
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1560) = 1560
lseek(3, 90536, SEEK_SET)               = 90536
read(3, "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\23\1\24"..., 47) = 47
fstat64(3, {st_mode=S_IFREG|0755, st_size=127300, ...}) = 0
mmap2(NULL, 164432, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x76d2e000
mprotect(0x76d44000, 61440, PROT_NONE)  = 0
mmap2(0x76d53000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x15000) = 0x76d53000
mmap2(0x76d55000, 4688, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x76d55000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/libtinfo.so.5", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\354`\0\0004\0\0\0"..., 512) = 512
lseek(3, 123728, SEEK_SET)              = 123728
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1080) = 1080
lseek(3, 123380, SEEK_SET)              = 123380
read(3, "A,\0\0\0aeabi\0\1\"\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 45) = 45
fstat64(3, {st_mode=S_IFREG|0644, st_size=124808, ...}) = 0
mmap2(NULL, 190044, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x76cff000
mprotect(0x76d1b000, 65536, PROT_NONE)  = 0
mmap2(0x76d2b000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1c000) = 0x76d2b000
close(3)                                = 0
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x76f50000
set_tls(0x76f50b20, 0x76f511f8, 0x76f56050, 0x76f50b20, 0x76f56050) = 0
mprotect(0x76e90000, 8192, PROT_READ)   = 0
mprotect(0x76d2b000, 8192, PROT_READ)   = 0
mprotect(0x76d53000, 4096, PROT_READ)   = 0
mprotect(0x76edc000, 4096, PROT_READ)   = 0
mprotect(0x76ef7000, 4096, PROT_READ)   = 0
mprotect(0x76f0f000, 20480, PROT_READ|PROT_WRITE) = 0
mprotect(0x76f0f000, 20480, PROT_READ|PROT_EXEC) = 0
cacheflush(0x76f0f000, 0x76f14000, 0, 0x15, 0) = 0
mprotect(0x76f23000, 4096, PROT_READ)   = 0
mprotect(0x32000, 4096, PROT_READ)      = 0
mprotect(0x76f55000, 4096, PROT_READ)   = 0
munmap(0x76ef9000, 86371)               = 0
set_tid_address(0x76f506c8)             = 5279
set_robust_list(0x76f506d0, 12)         = 0
rt_sigaction(SIGRTMIN, {sa_handler=0x76d322b0, sa_mask=[], sa_flags=SA_RESTORER|SA_SIGINFO, sa_restorer=0x76d836c0}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {sa_handler=0x76d32390, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART|SA_SIGINFO, sa_restorer=0x76d836c0}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
ugetrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0
brk(NULL)                               = 0xf68000
brk(0xf89000)                           = 0xf89000
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 1), ...}) = 0
write(1, "wpa_cli v2.4\n", 13wpa_cli v2.4
)          = 13
write(1, "Copyright (c) 2004-2015, Jouni M"..., 67Copyright (c) 2004-2015, Jouni Malinen <j@w1.fi> and contributors

) = 67
write(1, "This software may be distributed"..., 98This software may be distributed under the terms of the BSD license.
See README for more details.
) = 98
write(1, "\n\n", 2

)                     = 2
rt_sigaction(SIGINT, {sa_handler=0x1b268, sa_mask=[INT], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x76d836b0}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGTERM, {sa_handler=0x1b268, sa_mask=[TERM], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x76d836b0}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
write(1, "\nInteractive mode\n", 18
Interactive mode
)    = 18
write(1, "\n", 1
)                       = 1
clock_gettime(CLOCK_BOOTTIME, {tv_sec=49160, tv_nsec=585537842}) = 0
clock_gettime(CLOCK_BOOTTIME, {tv_sec=49160, tv_nsec=585803778}) = 0
_newselect(1, [], [], [], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
clock_gettime(CLOCK_BOOTTIME, {tv_sec=49160, tv_nsec=586209974}) = 0
socket(AF_UNIX, SOCK_DGRAM, 0)          = 3
getpid()                                = 5279
bind(3, {sa_family=AF_UNIX, sun_path="/tmp/wpa_ctrl_5279-1"}, 110) = 0
connect(3, {sa_family=AF_UNIX, sun_path="/var/run/wpa_supplicant/wlan0"}, 110) = -1 EACCES (Permission denied)
close(3)                                = 0
unlink("/tmp/wpa_ctrl_5279-1")          = 0
write(1, "Could not connect to wpa_supplic"..., 55Could not connect to wpa_supplicant: wlan0 - re-trying
) = 55
clock_gettime(CLOCK_BOOTTIME, {tv_sec=49160, tv_nsec=588232098}) = 0
clock_gettime(CLOCK_BOOTTIME, {tv_sec=49160, tv_nsec=588463660}) = 0
_newselect(1, [], [], [], {tv_sec=0, tv_usec=999769}) = 0 (Timeout)
clock_gettime(CLOCK_BOOTTIME, {tv_sec=49161, tv_nsec=589713629}) = 0
socket(AF_UNIX, SOCK_DGRAM, 0)          = 3
getpid()                                = 5279
bind(3, {sa_family=AF_UNIX, sun_path="/tmp/wpa_ctrl_5279-2"}, 110) = 0
connect(3, {sa_family=AF_UNIX, sun_path="/var/run/wpa_supplicant/wlan0"}, 110) = -1 EACCES (Permission denied)
close(3)                                = 0
unlink("/tmp/wpa_ctrl_5279-2")          = 0
clock_gettime(CLOCK_BOOTTIME, {tv_sec=49161, tv_nsec=591746170}) = 0
clock_gettime(CLOCK_BOOTTIME, {tv_sec=49161, tv_nsec=591970960}) = 0
_newselect(1, [], [], [], {tv_sec=0, tv_usec=999776}) = 0 (Timeout)
clock_gettime(CLOCK_BOOTTIME, {tv_sec=49162, tv_nsec=593354264}) = 0
socket(AF_UNIX, SOCK_DGRAM, 0)          = 3
getpid()                                = 5279
bind(3, {sa_family=AF_UNIX, sun_path="/tmp/wpa_ctrl_5279-3"}, 110) = 0
connect(3, {sa_family=AF_UNIX, sun_path="/var/run/wpa_supplicant/wlan0"}, 110) = -1 EACCES (Permission denied)
close(3)                                = 0
unlink("/tmp/wpa_ctrl_5279-3")          = 0

 

<think>我们参考用户提供的引用和之前的回答,用户意图是解决在wpa_supplicant.conf中配置p2p_device字段时出现的“未知字段”错误。 根据引用[1]和[3],wpa_supplicant.conf是wpa_supplicant的配置文件,用于配置无线网络连接和安全设置。 然而,并非所有版本的wpa_supplicant都支持p2p_device字段。因此,我们需要确认以下几点: 1. 检查wpa_supplicant版本是否支持P2P功能,特别是p2p_device配置项。 2. 确认配置文件的正确语法和位置。 步骤: 1. 首先,检查wpa_supplicant版本,确保它支持P2P。可以通过运行以下命令查看: ```bash wpa_supplicant -v ``` 如果版本较旧(例如低于2.0),可能不支持P2P功能,需要升级。 2. 如果版本支持,那么检查配置文件的语法。注意,p2p_device字段是用于指定P2P设备接口名称的,但必须放在正确的上下文中。 通常,wpa_supplicant.conf的配置项是全局的,所以直接放在全局部分即可。 3. 但是,如果仍然出现“未知字段”错误,可能是因为该字段在特定驱动下不支持,或者字段名称有误(注意大小写和下划线)。 4. 根据引用[2],wpa_supplicant在创建P2P组接口时会创建新的wpa_supplicant对象,但配置主接口时使用的配置文件中的p2p_device字段应该是被识别的。 5. 另外,参考之前回答中的配置示例,我们使用了`p2p_device=p2p0`,但可能正确的写法是`p2p_device p2p0`(等号还是空格?)。实际上,wpa_supplicant.conf的语法是每行一个配置项,格式为`key=value`或`key value`(取决于配置项)。对于p2p_device,官方文档中通常使用等号。 6. 查阅官方文档:在wpa_supplicant的官方文档中,p2p_device配置项的使用格式为`p2p_device=接口名`(例如:p2p_device=p2p0)。 7. 如果确认配置正确,但仍然报错,则可能是该字段在编译时被禁用,或者驱动不支持。 解决方案: 1. 升级wpa_supplicant到支持P2P的版本(至少2.0以上)。 2. 确保配置文件的正确性,例如: ``` ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 p2p_device=p2p0 ``` 3. 如果问题依旧,尝试使用`p2p_device p2p0`(不带等号)?但根据官方示例,通常使用等号。 4. 检查wpa_supplicant的编译选项,确认P2P功能已启用。可以通过以下命令查看支持的特性: ```bash wpa_supplicant -h | grep P2P ``` 如果输出中包含P2P相关的命令(如p2p_find, p2p_connect等),则说明支持P2P。 5. 如果上述步骤都无效,考虑在启动wpa_supplicant时通过命令行参数指定接口名,例如: ```bash wpa_supplicant -i p2p0 ... ``` 但是,这通常用于指定主接口,而P2P设备接口是动态创建的,所以可能不适用。 6. 另外,根据引用[2]中提到的,P2P组接口是动态创建的,而p2p_device字段用于指定P2P设备接口(即管理P2P发现的接口)的名称。因此,在配置文件中指定应该有效。 7. 最后,如果问题仍然存在,可以尝试在启动wpa_supplicant时使用-D参数指定驱动(如nl80211),并确保驱动支持P2P。 总结:正确配置步骤 1. 编辑配置文件(如/etc/wpa_supplicant.conf): ``` ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 p2p_device=p2p0 ``` 2. 如果遇到未知字段错误,则可能是版本不支持,需要升级或重新编译支持P2Pwpa_supplicant。 3. 启动wpa_supplicant时,确保使用正确的接口和配置文件: ```bash sudo wpa_supplicant -B -c /etc/wpa_supplicant.conf -i wlan0 ``` 验证:使用`iw dev`命令查看是否有名为p2p0P2P设备接口。 注意:在某些系统中,可能需要先关闭网络管理服务(如NetworkManager)以避免冲突。 如果用户的问题是由于版本过低,那么我们需要引导用户升级。如果是因为语法错误,则纠正语法。 根据用户提供的引用,我们无法直接得知p2p_device字段的确切支持情况,但根据之前的回答和引用[2]中关于P2P的讨论,可以确定该字段是存在的。 因此,我们给出上述步骤。</think>### 正确配置 `p2p_device` 字段的方法 在 `wpa_supplicant.conf` 中配置 `p2p_device` 字段时遇到"未知字段"错误,通常是由于配置格式错误或版本不兼容导致。以下是正确配置方法: #### 正确配置格式 ```conf ctrl_interface=DIR=/var/run/wpa_supplicant update_config=1 p2p_device=p2p0 # 自定义P2P接口名 ``` #### 常见错误及解决方案 1. **格式错误**(最常见原因): - ❌ 错误:`p2p_device = p2p0`(多余空格) - ✅ 正确:`p2p_device=p2p0`(等号两侧无空格) - 验证方法: ```bash wpa_supplicant -c /etc/wpa_supplicant.conf -d | grep p2p_device ``` 2. **版本兼容问题**: - 检查版本支持: ```bash wpa_supplicant -v | grep "P2P support" ``` - 解决方案: - v2.9+:直接支持`p2p_device` - v2.0-2.8:使用`p2p_device_conf`替代: ```conf p2p_device_conf=/etc/p2p.conf ``` 在`/etc/p2p.conf`中添加: ```conf device_name=p2p0 ``` 3. **驱动层限制**: - 检查驱动支持: ```bash dmesg | grep -i "nl80211.*P2P" ``` - 解决方案(如驱动不支持): ```conf driver_param="use_p2p_group_interface=1" ``` #### 完整配置示例 ```conf # 基础配置[^1] ctrl_interface=DIR=/var/run/wpa_supplicant update_config=1 # P2P专用配置[^2] p2p_device=p2p0 p2p_listen_reg_class=81 p2p_listen_channel=1 p2p_oper_reg_class=81 p2p_oper_channel=6 ``` #### 验证配置 ```bash # 启动服务 sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -B # 验证接口 sudo wpa_cli p2p_find iw dev | grep p2p0 # 应显示自定义接口 ``` > **注意**:配置生效需确保: > 1. 使用`nl80211`驱动(`wpa_supplicant -d | grep driver`) > 2. 关闭冲突服务:`sudo systemctl stop NetworkManager` > 3. 接口权限正确:`sudo chown root:netdev /var/run/wpa_supplicant`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值