c - 用C发送ARP包

标签 c network-programming packet arp

我想知道如何用 C 语言发送 ARP 数据包,sockets 的 sent 和 sendto 函数通过 TCP 或 UDP 发送,但我没有找到如何使用 ARP。

最佳答案

在这种情况下,您必须使用原始套接字,或者您可以使用一些库来简化此操作,推荐的库是 libpcap,下面我写了一个使用 libpcap 发送数据包的简单示例。

const int packet_size = 40; // change the value for real size of your packet
char *packet = (char *) malloc(packet_size)
pcap_t *handle = NULL;
char errbuf[PCAP_ERRBUF_SIZE], *device = NULL;
if ((device = pcap_lookupdev(errbuf)) == NULL) {
  fprintf(stderr, "Error lookup device", device, errbuf);
  exit(1);
}
if ((handle = pcap_open_live(device, BUFSIZ, 1, 0, errbuf)) == NULL) {
  fprintf(stderr, "ERRO: %s\n", errbuf);
  exit(1);
}
// here you have to write your packet bit by bit at packet
int result = pcap_inject(handle, packet, packet_size);

在这种情况下,您必须创建所有数据包主体,请查看:http://www.cse.ohio-state.edu/cgi-bin/rfc/rfc1293.html有关 ARP 数据包的信息,请访问 http://en.wikipedia.org/wiki/Ethernet_frame有关以太网帧的信息

关于c - 用C发送ARP包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21804015/

相关文章:

c# - C# 中多线程网络服务器的模式

java - 使用主机名的 HttpURLConnection 和 INetAddress 失败,而 IPv6 工作正常

java - 使用 MySQL 读取 Netflow 数据包内容

string - 这个用大小解析字符串的概念有技术名称吗?

c - 尝试使用 libcrypto 对参数字符串进行 RSA 解密时出错

将 long 转换为 (void *) 以传递

c - 在 C 中解析 HTML 文件 - libxml2 的替代方案

c++ - 列出所有网络连接,然后管理一个

android - 如何将Android MediaCodec编码的H264打包成RTP包

c - 数组和段错误