Со времени последнего обновления антивируса Avast я больше не могу подключаться к почтовым серверам POP3 с помощью java.net.Socket. Mozilla Thunderbird работает нормально, и я также могу подключиться с помощью PuTTY (raw, порт 110).
Подключение к другим портам, кроме 110, работает нормально. Когда выполняется следующий код:
try
{
System.out.println("Connecting to www.google.com:80");
java.net.Socket socket1 = new Socket("www.google.com", 80);
System.out.println("Connected");
socket1.close();
System.out.println("Connecting to pop01.binero.se:110");
java.net.Socket socket2 = new Socket("pop01.binero.se", 110);
System.out.println("Connected");
socket2.close();
}
catch(Exception ex)
{
ex.printStackTrace();
}
выводит:
Connecting to www.google.com:80
Connected
Connecting to pop01.binero.se:110
java.net.ConnectException: Connection refused: connect
at java.base/java.net.PlainSocketImpl.connect0(Native Method)
at java.base/java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:101)
at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
at java.base/java.net.Socket.connect(Socket.java:591)
at java.base/java.net.Socket.connect(Socket.java:540)
at java.base/java.net.Socket.<init>(Socket.java:436)
at java.base/java.net.Socket.<init>(Socket.java:213)
at SocketTest.main(SocketTest.java:15)
Если я отключу Avast MailShield для входящей почты, я могу подключиться, используя приведенный выше код. Насколько я знаю, MailShield перехватывает TCP-соединение от почтового клиента и сканирует все почтовые вложения. Если он находит вирус, он добавляет текст предупреждения к теме письма.
Чего я не понимаю, так это как он перехватывает TCP-соединение, как он различает мою программу, Thunderbird или PuTTY и почему он блокирует только мою программу.
Я хотел бы оставить MailShield активированным для Thunderbird и либо отключить его для моей собственной программы, либо заставить Avast распознать мою программу как действительный почтовый клиент и пропустить ее.