【发布时间】:2017-09-20 16:46:27
【问题描述】:
我想使用 C 语言的原始套接字发送原始数据包。我制作了一个可以在我的项目中使用的头文件。它被命名为“Inet.h”。代码:
#include <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <linux/if_ether.h>
int createSocket();
ssize_t sendBuffer(int socket, char buffer[], ssize_t length);
ssize_t sendBuffer(int socket, char buffer[], ssize_t length)
{
return send(socket, &buffer, length, 0);
}
int createSocket()
{
int _socket_ = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
return _socket_;
}
createSocket() 方法效果很好,但是 sendBuffer() 总是出问题。我做了一个测试代码:
#include "Inet.h"
int main()
{
int socket = createSocket();
printf("%i\n", socket);
char buffer[16] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P'};
ssize_t t = sendBuffer(socket, buffer, 16);
printf("%zd\n",t);
return 0;
}
输出如下:
3
-1
所以,正如我已经说过的,Socket 可以工作,但我不知道为什么 sendBuffer 函数不能工作。请帮忙。
【问题讨论】:
-
检查
errno或许? -
send() 有据可查。 '-1' 返回是一个错误。它解释得很清楚。谷歌“发送()”或“人工发送”。它就在那里。
标签: c sockets raw-sockets