2

他の人に配布したいプログラムを書いていますが、それはソケットを使用しており、ほとんどのセキュリティソフトウェアはそれをマルウェアとして扱います。ファイアウォールを下げてプログラムをスキャンから除外するように指示せずに、このプログラムを機能させるにはどうすればよいですか?ソケットで何か問題が発生している可能性がありますか、それともプログラムにデジタル証明書がないという問題ですか?

#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
int client(char *ip,int port,SOCKET *sock)
{
    struct sockaddr_in addr;
    *sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr(ip);
    addr.sin_port = htons(port);
    connect(*sock,(SOCKADDR*)&addr,sizeof(addr));
    return 2;
}
void ssend(char *buffer,int len,SOCKET sock)
{
    int sent;
    int *tmp;
    char head[4];
    sent=0;
    tmp=(int*)&head;
    *tmp=htonl(len);
    while(sent<4)
    {
        sent+=send(sock,head,4-sent,0);
    }
    sent=0;
    while(sent<len)
    {
        sent+=send(sock,buffer,len-sent,0);
    }
}
void srecv(char *buffer,int *len,SOCKET sock)
{
    char head[4];
    recv(sock,head,4,MSG_WAITALL);
    *len=ntohl(*((int*)head));
    recv(sock,buffer,*len,MSG_WAITALL);
}
int main(int argc,char **argv)
{
    WSADATA dat;
    WSAStartup(MAKEWORD(2, 2),&dat);
    SOCKET sock;
    char ip[256];
    char msg[1024];
    int port;
    scanf("%s",ip);
    scanf("%d",&port);
    printf("%d\n",client(ip,port,&sock));
    while(1)
    {
        scanf("%s",msg);
        ssend(msg,strlen(msg),sock);
    }
}

きれいなコードではありません、私は知っています!私はCでソケットの足がかりを得ようとしています。

4

1 に答える 1

3

できることは何もありません。ファイアウォールソフトウェアが、「自宅に電話をかけている」マルウェアや他のマシンへの攻撃を開始しているマルウェアと、正当なプログラムを区別することは不可能です。ユーザーはこれに対して明示的な例外を与える必要があります。

さて、あなたができることが1つあります。それは、HTTPポート80やSSL対応の443などの広く使用されているポートでプログラムを動作させることです。

ルールがポートだけでなくプログラムのIDに基づいている場合、それが役立つかどうかさえわかりません。ポート80を介してHTTP接続を確立できるアプリケーションを制限するのには非常に理由があります。ポート80は、マルウェアが自宅に電話をかけたり、悪意のあるクラッドをダウンロードしたりするためによく使用されます。

于 2012-04-24T05:06:43.527 に答える