私は非常に単純なUDPサーバープログラムを持っています
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char**argv)
{
int sockfd,n;
struct sockaddr_in servaddr,cliaddr;
socklen_t len;
char mesg[1000];
sockfd=socket(AF_INET,SOCK_DGRAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(54000);
bind(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
for (;;)
{
len = sizeof(cliaddr);
n = recvfrom(sockfd,mesg,1000,0,(struct sockaddr *)&cliaddr,&len);
sendto(sockfd,mesg,n,0,(struct sockaddr *)&cliaddr,sizeof(cliaddr));
printf("-------------------------------------------------------\n");
mesg[n] = 0;
printf("Received the following:\n");
printf("%s",mesg);
printf("-------------------------------------------------------\n");
}
}
私はそれをいくつかのマシンに置き、udpクライアントにパケットを送信させて、着信udpパケットを正常に受け入れることができます
次に、Fedora 18を搭載したマシンに配置します。プログラムをコンパイルして実行し、udpクライアントにパケットを送信させます(他のマシンと同じ)が、プログラムは使用した受信UDPパケットを受け入れることができませんキャプチャ用の tcpdump を実行すると、着信 udp パケットが表示されます。なぜサーバー プログラムは、このマシンで着信 UDP パケットを受け入れないのですか?
iptables ルールを確認したところiptables -L
、結果は次のとおりです
https://docs.google.com/file/d/0B09y_TWqTtwlNHp1eTJkTFNuY0k/edit?usp=sharing
これには潜在的な理由がありますか?ありがとう!