1

私は非常に単純な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

これには潜在的な理由がありますか?ありがとう!

4

1 に答える 1

1

コードは一見問題ないように見えます。

最も明白な説明は、Fedora 18 マシンがインストールされiptables、デフォルトでファイアウォールが設定されているということかもしれません...

実行して、ロードされたモジュールlsmodを探したり、現在のルールセットを一覧表示したりしてみてください。iptablesiptables -L

于 2013-04-12T13:50:07.260 に答える