记录贴
1.Linux 下socket返回值总为-1
sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
if (sockfd < 0)
{
printf("ip:%s,socket error
",ips);
return ERROR;
}
经过查资料:
-
创建原始套接字具体格式如下:
int sockfd;sockfd = socktet(AF_INET, SOCK_RAW, IPPROTO_ICMP);
- 第一个参数:协议族 AF_INET 代表TCP/IP协议
- 第二个参数:SOCKET类型
- 第三个参数:协议类型注意:@如果指定协议为0时,原始套接字(SOCK_RAW)可以接收内核传递给原始套接字的任何IP数据包,且只有超级用户才可以创建原始套接字。即在root权限下运行
2.implicit declaration of function ‘memset’ /include ‘<string.h>’ or provide a declaration of ‘memset’
-
memset函数原型:
void *memset(void *s, int c, size_t n)
; -
函数可以给任意类型数数组赋0,但注意
-
第一个参数为void类型指针,需要进行强制转换
-
包含头文件
<string.h>
-
3.-lsocket
这个编译选项现在已经默认包含这个库,不用手动连接,直接编译即可。
4.ifconfig查看网卡信息命令用不了
- 首先可以试一下使用root权限:
sudo ifconfig
- 如果不行
apt install net-tools
进行安装,然后再用上面的命令
5.icotl 函数设置接口标志 error:con‘t get flags:no such device
一般是网卡的名称搞错了,可以用命令ip addr
或者ifconfig
查看网卡信息