2012-04-24 4 views
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.

+0

Трудно сказать, не имея возможности увидеть, что вы делаете. –

+0

О, конечно, я добавлю в свой код. –

+1

Этот код использует сокеты POSIX, но в большинстве дистрибутивов Linux нет «программного обеспечения безопасности», которое выводит исполняемые файлы как вредоносное ПО ... В какой ОС должна запускаться эта программа? – Borealid

ответ

3

Вы ничего не можете сделать. Невозможно, чтобы программное обеспечение брандмауэра различало вредоносное ПО, которое «звонит домой» или запускает атаку на другие машины и законную программу. Для этого пользователю нужно дать явное исключение.

Ну, есть одна вещь, которую вы можете сделать: сделать вашу программу работы над широко используемый порт, как HTTP порт 80, или SSL аналог 443.

Не уверен даже, что поможет, если правило на основе идентичности программы, а не только порта. Существует очень веская причина ограничить, какие приложения могут делать HTTP-соединения через порт 80. Порт 80 часто используется вредоносными программами для звонка домой и загрузки вредоносных данных.

+0

Как насчет программ вроде Minecraft или всех других игр? И программное обеспечение безопасности никогда не искажало Python для использования сокетов. Это потому, что у интерпретаторов Python и Java есть цифровые сертификаты или что-то еще? –

+0

Это было немного непонятно. Мне кажется, что профессионально разработанные программы каким-то образом не могут быть постоянно удалены моим программным обеспечением безопасности, в отличие от программ, которые я пишу. –

+0

Ах, что может случиться, что установщик программного обеспечения добавляет программу в список авторизованных приложений в реестре. Я думаю: «HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ SharedAccess \ Parameters \ FirewallPolicy \ StandardProfile \ AuthorizedApplications \ List'. – Kaz

Смежные вопросы