写一个使用原始套接字接收指定ip地址的程序
时间: 2023-03-28 19:01:23 浏览: 66
可以使用以下代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#define BUFFER_SIZE 1024
int main(int argc, char *argv[]) {
if (argc != 2) {
printf("Usage: %s <ip address>\n", argv[]);
return 1;
}
char *ip_address = argv[1];
int sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
if (sockfd < ) {
perror("socket");
return 1;
}
struct sockaddr_in addr;
memset(&addr, , sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr(ip_address);
if (bind(sockfd, (struct sockaddr *)&addr, sizeof(addr)) < ) {
perror("bind");
return 1;
}
char buffer[BUFFER_SIZE];
while (1) {
int len = recv(sockfd, buffer, BUFFER_SIZE, );
if (len < ) {
perror("recv");
return 1;
}
printf("Received %d bytes from %s:\n", len, ip_address);
for (int i = ; i < len; i++) {
printf("%02x ", (unsigned char)buffer[i]);
if ((i + 1) % 16 == ) {
printf("\n");
}
}
printf("\n");
}
return ;
}