安全软件讨厌我的插座

时间:2012-04-24 03:53:29

标签: c security sockets winsock

我正在编写一个我要分发给其他人的程序,但它使用套接字,大多数安全软件将其视为恶意软件。如何在不告诉人们降低防火墙并免除扫描程序的情况下使这个程序工作?我的套接字是否有问题,或者这是我的程序没有数字证书的问题?

#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语言在插座上站稳脚跟。

1 个答案:

答案 0 :(得分:3)

你无能为力。防火墙软件无法区分“打电话回家”或对其他计算机和合法程序发起攻击的恶意软件。用户必须为此提供明确的例外。

嗯,有一件事你可以做:让你的程序在一个广泛使用的端口上工作,比如HTTP端口80或SSL对应端443。

如果规则基于程序的标识,而不仅仅是端口,则甚至不确定是否有帮助。有一个很好的理由来限制哪些应用程序可以通过端口80进行HTTP连接。恶意软件经常使用端口80来打电话回家和下载恶意软件。