基于数据包的原始套接字
2012-11-12 14:04
225 查看
服务器端代码:
#include <stdlib.h>
#include <string.h>
#include <sys/un.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#define N 64
typedef struct sockaddr SA;
int main(int argc, char *argv[])
{
int sockfd;
socklen_t addr_len;
char buf
;
struct sockaddr_un myaddr, peeraddr;
if (argc < 2)
{
printf("input format is : %s <server_socket_file>\n", argv[0]);
return -1;
}
if ((sockfd = socket(PF_UNIX, SOCK_DGRAM, 0)) == -1)
{
perror("sock fail");
return -1;
}
unlink(argv[1]);
bzero(&myaddr, sizeof(myaddr));
myaddr.sun_family = PF_UNIX;
strcpy(myaddr.sun_path, argv[1]);
if (bind(sockfd, (SA *)&myaddr, sizeof(myaddr)) == -1)
{
perror("bind fail");
return -1;
}
addr_len = sizeof(peeraddr);
recvfrom(sockfd, buf, N, 0, (SA *)&peeraddr, &addr_len);
printf("recv from %s : %s\n",peeraddr.sun_path, buf);
sendto(sockfd, buf, N, 0, (SA *)&peeraddr, addr_len);
return 0;
}
客户端代码如下:
#include <stdlib.h>
#include <string.h>
#include <sys/un.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#define N 64
typedef struct sockaddr SA;
int main(int argc, char *argv[])
{
int sockfd;
socklen_t addr_len;
char buf
;
struct sockaddr_un peeraddr, myaddr;
if (argc < 3)
{
printf("input format is : %s <server_sock_file> <my_sock_file>\n", argv[0]);
return -1;
}
if ((sockfd = socket(PF_UNIX, SOCK_DGRAM, 0)) == -1)
{
perror("sock fail");
return -1;
}
// bind myaddr
unlink(argv[2]);
bzero(&myaddr, sizeof(myaddr));
myaddr.sun_family = PF_UNIX;
strcpy(myaddr.sun_path, argv[2]);
if (bind(sockfd, (SA *)&myaddr, sizeof(myaddr)) == -1)
{
perror("bind fail");
return -1;
}
bzero(&peeraddr, sizeof(peeraddr));
peeraddr.sun_family = PF_UNIX;
strcpy(peeraddr.sun_path, argv[1]);
strcpy(buf, "this is unix dgram socket\n");
addr_len = sizeof(peeraddr);
sendto(sockfd, buf, N, 0, (SA *)&peeraddr, addr_len);
recvfrom(sockfd, buf, N, 0, (SA *)&peeraddr, &addr_len);
printf("recv from %s : %s\n", peeraddr.sun_path, buf);
return 0;
}
#include <stdlib.h>
#include <string.h>
#include <sys/un.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#define N 64
typedef struct sockaddr SA;
int main(int argc, char *argv[])
{
int sockfd;
socklen_t addr_len;
char buf
;
struct sockaddr_un myaddr, peeraddr;
if (argc < 2)
{
printf("input format is : %s <server_socket_file>\n", argv[0]);
return -1;
}
if ((sockfd = socket(PF_UNIX, SOCK_DGRAM, 0)) == -1)
{
perror("sock fail");
return -1;
}
unlink(argv[1]);
bzero(&myaddr, sizeof(myaddr));
myaddr.sun_family = PF_UNIX;
strcpy(myaddr.sun_path, argv[1]);
if (bind(sockfd, (SA *)&myaddr, sizeof(myaddr)) == -1)
{
perror("bind fail");
return -1;
}
addr_len = sizeof(peeraddr);
recvfrom(sockfd, buf, N, 0, (SA *)&peeraddr, &addr_len);
printf("recv from %s : %s\n",peeraddr.sun_path, buf);
sendto(sockfd, buf, N, 0, (SA *)&peeraddr, addr_len);
return 0;
}
客户端代码如下:
#include <stdlib.h>
#include <string.h>
#include <sys/un.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#define N 64
typedef struct sockaddr SA;
int main(int argc, char *argv[])
{
int sockfd;
socklen_t addr_len;
char buf
;
struct sockaddr_un peeraddr, myaddr;
if (argc < 3)
{
printf("input format is : %s <server_sock_file> <my_sock_file>\n", argv[0]);
return -1;
}
if ((sockfd = socket(PF_UNIX, SOCK_DGRAM, 0)) == -1)
{
perror("sock fail");
return -1;
}
// bind myaddr
unlink(argv[2]);
bzero(&myaddr, sizeof(myaddr));
myaddr.sun_family = PF_UNIX;
strcpy(myaddr.sun_path, argv[2]);
if (bind(sockfd, (SA *)&myaddr, sizeof(myaddr)) == -1)
{
perror("bind fail");
return -1;
}
bzero(&peeraddr, sizeof(peeraddr));
peeraddr.sun_family = PF_UNIX;
strcpy(peeraddr.sun_path, argv[1]);
strcpy(buf, "this is unix dgram socket\n");
addr_len = sizeof(peeraddr);
sendto(sockfd, buf, N, 0, (SA *)&peeraddr, addr_len);
recvfrom(sockfd, buf, N, 0, (SA *)&peeraddr, &addr_len);
printf("recv from %s : %s\n", peeraddr.sun_path, buf);
return 0;
}
相关文章推荐
- 基于嗅探原理的原始套接字木马编写原理
- ALEXA之数据包:基于套接字发送伪造IP包
- 原始套接字SOCK_RAW发送UDP数据包
- 【Linux网络编程】原始套接字实例:发送 UDP 数据包
- 使用Linux 原始套接字抓取数据链路层上IEC61850-9-2(LE) SV数据包并显示的参考程序
- Windows下基于原始套接字的回射客户端的源码
- Linux 网络编程——原始套接字实例:发送 UDP 数据包
- UNIX环境编程------原始套接字---原始套接字编程实例: 接收的链路层数据包,并对其进行简单分析
- Windows 7 环境下基于原始套接字和ICMP的路由探测开发的问题【1】
- 以原始套接字的方式 截获流经本机网卡的IP数据包
- 以原始套接字的方式 截获流经本机网卡的IP数据包
- 基于原始套接字(raw socket)的网络抓包工具
- 原始套接字收发MAC数据包完整历程--发送Codes & 接收Codes
- 基于原始套接字的嗅探器
- 【LIUNX】---TCP/IP学习与实践[基于原始套接字的rootkit]
- 使用Linux 原始套接字抓取数据链路层上IEC61850-9-2(LE) SV数据包并显示的参考程序
- 使用原始套接字实现数据包捕获
- 基于嗅探原理的原始套接字木马
- 基于C语言与原始套接字实现Ping程序
- 原始套接字抓取所有以太网数据包与分析