标签: c sockets ioctl
在linux机器上的用户模式[非root]中,我试图使用ioctl(iInterfaceSocket, SIOCSIFADDR, &stCommand)来绑定套接字。我得到了error 13 -> Permission denied because of user mode。如果从usermode更改为内核模式,一切正常。
ioctl(iInterfaceSocket, SIOCSIFADDR, &stCommand)
error 13 -> Permission denied because of user mode
我只需要在用户模式下绑定套接字。请在解释上述问题时提出解决方案。如果我错过了任何信息,请告诉我,我会提供更多信息。
答案 0 :(得分:8)
除非你是root用户,否则你不能设置接口地址(从技术上讲,除非你有CAP_NET_ADMIN)。请参阅devinet.c。
CAP_NET_ADMIN
解决方案是以root身份运行。如何实现该解决方案,是使整个程序SUID,还是要求用户通过sudo或gksudo运行它,或者是否将程序分为两部分(root和non-root) ,那个选择取决于你。