基于数据包的原始套接字
来源:互联网 发布:广联达软件免费版 编辑:程序博客网 时间:2024/05/19 09:12
服务器端代码:
#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[N];
struct sockaddr_un myaddr, peeraddr;
{
int sockfd;
socklen_t addr_len;
char buf[N];
struct sockaddr_un myaddr, peeraddr;
if (argc < 2)
{
printf("input format is : %s <server_socket_file>\n", argv[0]);
return -1;
}
{
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;
}
{
perror("sock fail");
return -1;
}
unlink(argv[1]);
bzero(&myaddr, sizeof(myaddr));
myaddr.sun_family = PF_UNIX;
strcpy(myaddr.sun_path, 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;
}
{
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);
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[N];
struct sockaddr_un peeraddr, myaddr;
{
int sockfd;
socklen_t addr_len;
char buf[N];
struct sockaddr_un peeraddr, myaddr;
if (argc < 3)
{
printf("input format is : %s <server_sock_file> <my_sock_file>\n", argv[0]);
return -1;
}
{
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;
}
{
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;
}
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]);
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);
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;
}
}
- 基于数据包的原始套接字
- 基于数据流的原始套接字
- 基于原始套接字的嗅探器
- 用原始套接字收发数据包程序
- 使用原始套接字实现数据包捕获
- 原始套接字SOCK_RAW发送UDP数据包
- 基于原始套接字编程
- 基于嗅探原理的原始套接字木马
- 基于嗅探原理的原始套接字木马
- 基于socket原始套接字的网络嗅探器
- Windows下基于原始套接字的回射客户端
- 以原始套接字的方式 截获流经本机网卡的IP数据包
- 以原始套接字的方式 截获流经本机网卡的IP数据包
- 以原始套接字的方式 截获流经本机网卡的IP数据包(转)
- 利用原始套接字(sock_raw)编写的抓取ip数据包的小程序
- 以原始套接字的方式 截获流经本机网卡的IP数据包
- 以原始套接字的方式 截获流经本机网卡的IP数据包
- 以原始套接字的方式 截获流经本机网卡的IP数据包
- struts2 国际化
- 网站优化从哪几步入手?
- 基础算法系列(二)——冒泡排序
- hdu2579
- 稻草人新手使用心得
- 基于数据包的原始套接字
- makefile 条件语句
- 给定有序序列 a,b,求出所有a[i]+b[j]中所的第k小的数
- C语言笔试题-5
- JSF 2.0中granule压缩、合并、加密javascript
- Linux下系统资源监控工具Collectl基本介绍
- 悟空死了???
- java.lang.IllegalStateException异常:简单分析和简单解决方案
- 分布式 php实现session共享