原始套接字做私有协议,求解问题
服务器端#include<stdio.h>#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<string.h>
#include "tcpnc.h"
#define SERVER_PORT 8888
#define BUFF_LEN 256
int main(int argc,char *argv[])
{
int sockfd;
struct sockaddr_in serv_addr,cli_addr;
if((sockfd=socket(AF_INET,SOCK_RAW,IPPROTO_TCPNC))<0)
{
perror("socket ");
exit(1);
}
memset(&serv_addr,0,sizeof(serv_addr));
serv_addr.sin_family=AF_INET;
serv_addr.sin_addr.s_addr=inet_addr("127.0.0.1");
//serv_addr.sin_port=htons(SERVER_PORT);
memset(&cli_addr,0,sizeof(cli_addr));
cli_addr.sin_family=AF_INET;
cli_addr.sin_addr.s_addr=inet_addr("127.0.0.2");
if(bind(sockfd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr))==-1)
{
perror("bind ");
exit(1);
}
char buff;
int len;
while(1)
{
len=sizeof(cli_addr);
int n=1;
n=recvfrom(sockfd,buff,BUFF_LEN,0,(struct sockaddr*)&cli_addr,&len);
if(n==0)
{
printf("recvfrom error!");
}
buff='\0';
printf("message:%s\n",buff+40);
printf("bytes:%d\n",n);
}
close(sockfd);
return 0;
}客户端#include<stdio.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<string.h>
#include "tcpnc.h"
#define SERVER_PORT 8888
#define BUFF_LEN 256
int main(int argc,char *argv[])
{
int sockfd;
struct sockaddr_in serv_addr,cli_addr;
if((sockfd=socket(AF_INET,SOCK_RAW,IPPROTO_TCPNC))<0)
{
perror("socket ");
exit(1);
}
memset(&serv_addr,0,sizeof(serv_addr));
serv_addr.sin_family=AF_INET;
serv_addr.sin_addr.s_addr=inet_addr("127.0.0.1");
//serv_addr.sin_port=htons(SERVER_PORT);
memset(&cli_addr,0,sizeof(cli_addr));
cli_addr.sin_family=AF_INET;
cli_addr.sin_addr.s_addr=inet_addr("127.0.0.2");
if(bind(sockfd,(struct sockaddr *)&cli_addr,sizeof(struct sockaddr))==-1)
{
perror("bind ");
exit(1);
}
const int on=1;
if(setsockopt(sockfd,IPPROTO_IP,IP_HDRINCL,&on,sizeof(on))==-1)
{
perror("setsockopt ");
exit(0);
}
char buf;
char send_str;
char *str;
str=(char *)(buf+20);
str=send_str;
printf("please input your message:");
scanf("%s",send_str);
send_str='\0';
ip_hdr *iphdr;
iphdr = (ip_hdr*)buf;
//udp_hdr *udphdr;
//udphdr = (udp_hdr*)(buf+20);
iphdr->ip_length = 5;
iphdr->ip_version= 4;
iphdr->ip_tos = 0;
iphdr->ip_total_length = htons(sizeof(buf));
iphdr->ip_id = 0;
iphdr->ip_flags = 0x40;
iphdr->ip_ttl = 0x40;
iphdr->ip_protocol = 0x9c;
iphdr->ip_cksum = 0;
iphdr->ip_source = inet_addr("127.0.0.2");//源地址
iphdr->ip_dest = inet_addr("127.0.0.1");//目的地址
iphdr->ip_cksum = checksum((unsigned short*)buf, 20);
int res =sendto(sockfd, buf, sizeof(buf), 0, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
return 0;
}为什么运行出来以后,显示
message: 看看
页:
[1]