Мне нравится утилита nethogs, которую я использую на своём сервере с Debian, для просмотра соединений и скорости передачи данных по процессам, но как-то она, после обновления, внезапно перестала работать, и стала выпадать с сообщением:

nethogs creating socket failed while establishing local IP — are you root?

Фикс такой:

wget -c https://github.com/raboof/nethogs/archive/v0.8.1.tar.gz
tar xf v0.8.1.tar.gz
cd ./nethogs-0.8.1/
sudo apt-get install libncurses5-dev libpcap-dev
make && sudo make install
sudo nethogs

Вот и всё.

function returnStatus(req, status) {
//console.log(req);
if(status == 200) {
console.log("The url is available");
// send an event
}
else {
console.log("The url returned status code " + status);
// send a different event
}
}

function fetchStatus(address) {
var client = new XMLHttpRequest();
client.onreadystatechange = function() {
// in case of network errors this might not give reliable results
if(this.readyState == 4)
returnStatus(this, this.status);
}
client.open(“HEAD”, address);
client.send();
}


fetchStatus("/");

 

Обновляем список доступных пакетов
apt-get update

Устанавливаем OpenVPN
apt-get install openvpn

Защита соединения в OpenVPN в данном случае строится на использовании сертификатов и ключей для сервера и для клиентов. Для их генерации в пакете OpenVPN имеются специальные скрипты, расположенные в /usr/share/doc/openvpn/examples/easy-rsa/2.0 Перед началом работы скопируем их, чтобы не изменять оригиналы.

(для старых версий openvpn)

mkdir /etc/openvpn/easy-rsa
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa

С лета 2013 года easy-rsa не входит в OpenVPN и команда указанная выше не сработает(не найдет easy-rsa), тогда делаем доп команду:

sudo apt-get install easy-rsa

и копируем из другого места:

mkdir /etc/openvpn/easy-rsa
cp -r /usr/share/easy-rsa /etc/openvpn/easy-rsa
mv /etc/openvpn/easy-rsa/easy-rsa /etc/openvpn/easy-rsa/2.0

Переходим в созданную директорию, где и займёмся генерацией ключей и сертификатов

cd /etc/openvpn/easy-rsa/2.0

Редактируем файл переменных

nano vars

Здесь нужно добавить следующие строки:

# По умолчанию здесь просто openssl, которого нет в директории, в результате чего мы получим ошибку, если не укажем существующий. Я выбрал последнюю версию. Указывается без расширения .conf.
export OPENSSL=»openssl»

# В самом низу файла добавить
export KEY_ALTNAMES=»VPNsUS»

копируем конфиг openssl

cp openssl-1.0.0.cnf openssl.cnf

Загружаем переменные

source ./vars

Очищаем от старых сертификатов и ключей папку keys и создаем серийный и индексные файлы для новых ключей

./clean-all

Подтверждаем очистку.

Создаем сертификат. По умолчанию поля будут заполняться данными, введенными ранее в vars, поэтому можно ничего не менять.

./build-ca

Создаем ключ сервера

A challenge password []: Заполняется произвольным значением, насколько я понял это нужно только для создания ключа и больше нам не потребуется.

./build-key-server server

В конце соглашаемся с запросом на подпись и добавление сертификаты в базу.

Можно сразу создать ключи для клиента, перейдя в соответствующую часть статьи. Я вынес в отдельный раздел, т.к. ключи клиента могут генерироваться не один раз, чтобы было понятнее с чего начать в том случае когда нужно добавить клиента.

Создаем ключ Диффи Хельман

./build-dh

Cоздаем ключ для tls-аутификации

openvpn —genkey —secret keys/ta.key

Перемещаем сертификаты

cp -r /etc/openvpn/easy-rsa/2.0/keys/ /etc/openvpn/

Создание файла конфигурации сервера

cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
cd /etc/openvpn
gunzip -d /etc/openvpn/server.conf.gz

nano /etc/openvpn/server.conf

port 1194
proto udp
dev tun
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key # This file should be kept secret
dh /etc/openvpn/keys/dh2048.pem
server 172.30.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
tls-auth ta.key 0 # This file is secret
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3
tls-server
tls-auth /etc/openvpn/keys/ta.key 0
tls-timeout 120
auth SHA1
cipher BF-CBC
push «redirect-gateway def1»
push «dhcp-option DNS 8.8.8.8»
status /var/log/openvpn-status.log
log /var/log/openvpn.log

Можно запускать наш сервер OpenVPN

service openvpn restart

В /etc/sysctl.conf расскомментируем #net.ipv4.ip_forward=1 после чего
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -p

iptables -t nat -A POSTROUTING -s 172.30.0.0/24 -o venet0:0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 172.30.0.0/24 -j SNAT —to 5.45.x.x
вместо venet0:0 указать имя внешнего интерфейса сервера (смотреть командой ifconfig),
вместо 5.45.x.x — указать внешний IP Вашего сервера,

iptables-save

Создание ключей и сертификатов

Ключи клиента создаются на сервере

Переходим в созданную директорию, где и замёмся генерацией ключей и сертификатов

cd /etc/openvpn/easy-rsa/2.0

Загружаем переменные

source vars

Создаем ключ клиента

Common Name (eg, your name or your server’s hostname) []: нужно вписать название файла ключа, в данном случае client

./build-key client

Если хотим защитить ключ паролем, то генерируем его другой командой, но в таком случае поднимать соединение автоматически не получится:

./build-key-pass client

Теперь нужно не забыть скопировать ключи (ca.crt, dh1024.pem, client.crt, client.key, ta.key) на клиента OpenVPN в /etc/openvpn/keys/

mv /etc/openvpn/keys/ /etc/openvpn/keys_backup
mv /etc/openvpn/easy-rsa/2.0/keys/ /etc/openvpn/

Создание файла конфигурации клиента, это делается на домашнем компьютере в любом простом текстовом редакторе вроде блокнота:

client
dev tun
proto udp
remote 5.45.x.x 1194
resolv-retry infinite
ca ca.crt
cert client.crt
key client.key
tls-client
tls-auth ta.key 1
auth SHA1 # по-умолчанию. Можно MD5
cipher BF-CBC
remote-cert-tls server
comp-lzo
persist-key
persist-tun

вместо 5.45.x.x — нужно вписать внешний IP вашего сервера

И сохраняем с именем client.ovpn в отдельную папку, например «C:\Program Files\OpenVPN\config»

В этой же папке, где мы сохранили client.ovpn, создаём ещё 4 пустых файла, и называем их:
ca.crt
ta.key
client.crt
client.key

и заполняем их содержимым, которое берём из (текст копируем прямо из консоли)
cat /etc/openvpn/keys/ca.crt
cat /etc/openvpn/keys/ta.key
cat /etc/openvpn/keys/client.key
cat /etc/openvpn/keys/client.crt

Сохраняем и запускаем соединение.

Добавление в автозагрузку:

update-rc.d openvpn defaults

Пришлось мне как-то разрабатывать на Java проект, который был завязан на работе с базой данных MySQL. Я нашёл в Сети класс, который удобно работает с SQLite, и переделал его для работы с MySQL, собственно сделать это было нетрудно, дополнительно в этот класс можно добавить несколько методов для удобной работы, но это уже на Ваше пожелание. Собственно, для своих задач эти методы я создавал, а Вам они будут скорее всего не пригодятся, оставлю самые общие лишь.

Добавлены некоторые методы, возвращающие массив объектов из базы данных, переделать можно по своему усмотрению.

Уточняю, этот класс работает с базой данных минуя ORM, т.е. не использует ORM.

package example.Database;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

public class MySQLConnect {

    private Connection con = null;

    public MySQLConnect() {
        //для того, чтобы подключение можно было сделать позже
    }

    public MySQLConnect(String url, String port, String dbName, String login, String pass) {
        setConnection(url, port, dbName, login, pass);
    }

    public MySQLConnect(String url, String dbName, String login, String pass) {
        setConnection(url, "3306", dbName, login, pass);
    }

    public void setConnection(String url, String port, String dbName, String login, String pass) {
        try {
            if (port == null) {
                port = "3306"; // если порт не указан, то порт по умолчанию
            }
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://" + url + ":" + port + "/" + dbName, login, pass);
        } catch (ClassNotFoundException ex) {
            System.err.println("MySQLdb: Cannot find this db driver classes. Install com.mysql.jdbc driver!");
        } catch (SQLException e) {
            System.err.println("MySQLdb: Cannot connect to " + dbName);
        }
        if (con != null) {
            System.out.println("Connection to DB established successfully.");
        }
    }

    public Connection getConnection() {
        return con;
    }

/*	метод, выполняющий просмотр базы данных, по сути не нужный,
*	т.к возвращает лишь успешно ли выполнена операция, но для
*	примера выполнения запроса, оставлю 
*/
    public boolean executeQuery(String query) {
        try {
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(query);
            rs.close();
            st.close();
            return true;
        } catch (SQLException e) {
            System.err.println("There are problems with the query " + query + " in method "executeQuery"");
            e.printStackTrace();
            return false;
        }
    }

    public void executeUpdate(String query) { //метод, выполняющий изменения в БД
        try {
            PreparedStatement statement = con.prepareStatement(query);
            statement.executeUpdate();
        } catch (SQLException e) {
            System.err.println("There are problems with the query " + query + " in method "executeUpdate"");
            e.printStackTrace();
        }
    }

    public Object[][] getQueryResultByParam(String query, String idColumnName, String param) {
        try {
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(query);

            ArrayList idArrayList = new ArrayList();
            ArrayList dataArrayList = new ArrayList();

            while (rs.next()) {
                idArrayList.add(rs.getString(idColumnName));
                dataArrayList.add(rs.getString(param));
            }

            Object[][] result = new Object[2][];

            result[0] = idArrayList.toArray();
            result[1] = dataArrayList.toArray();

            rs.close();
            st.close();
            return result;
        } catch (SQLException e) {
            System.err.println("There are problems with the query " + query + " in method "getQueryResultByParam"");
            e.printStackTrace();
            return null;
        }
    }

    public Object[][] getQueryResultByParam(String query, String param) {
        return this.getQueryResultByParam(query, "id", param);
    }

    public Object[][] getParam(String tableName, String param) {
        return this.getQueryResultByParam("SELECT id, " + param + " FROM " + tableName + " WHERE deleted = '0' ORDER BY id", "id", param);
    }
}

Из Турции недоступен сайт vk.com из-за того, что нарушает копирайты, поэтому зайти ана него не получается. Можно воспользоваться прокси-сервером, но для этого его нужно найти или организовать.

Намного проще это ограничение обходится через сайты-анонимайзеры, например cameleo.ru, но этот вариант имеет недостаток — нельзя прослушивать аудиозаписи и смотреть видео, поэтому есть способ куда лучше предыдущего.

Для этого при подключении к интернету, обычно это роутеры (точки доступа), нужно указать DNS серверы вместо выданных вам провайдером (или роутером) на например, гугловские 8.8.8.8 и 8.8.4.4, после этого следует очистить кэш DNS имён на компьютере, в Windows это делается командой ipconfig /flushdns после чего можно успешно зайти на Вконтакте.

Столкнулся с проблемой и долгое время не мог найти решения в интернете. А именно моя проблема выглядела таким образом:

Имеется 2 сетевых карты (eth1 и eth2), два провайдера соответственно. От одного мне необходим сеть и интерент, от другого только сеть.

Решалось при помощи стандартного добавления маршрутов до поднятия ppp0 (интернета), но это не устраивало, т.к. необходимо, чтобы маршрутизация прописывалась при старте системы, когда и поднимался интернет.

Роясь в скриптах загрузки системы, прописывания маршрутов в них так ничего и не удалось добиться (вариант, при старте графической среды также не устраивал).

Mandriva Linux создан на основе Red Hat Linux, соответственно и многие конфиги, пути и настройки совпадают. Однако это не дало должного эффекта

Спустя несколько дней это таки удалось — поднять сеть и инет автоматом и чтобы маршруты тоже срабатывали при загрузке системы.

Сначала по совету друга — создаю файл static-routes в директории /etc/sysconfig
там приписываю строки:
any net 172.25.0.0/16 gw 172.25.12.1
any net 192.168.0.0/16 gw .192.168.250.3

но применяются эти маршруты к ppp0 и соответственно не работают правильно.
также редактирую файл

eth1 net 172.25.0.0/16 gw 172.25.12.1
eth2 net 192.168.0.0/16 gw .192.168.250.3

это не помогло, какая-то фигня в таблице маршрутизации после него.

потом также трачу время на то, что создаю в директориях /etc/sysconfig/network-scripts/device файлы
route-eth1 и route-eth2
с содержимым
ADDRESS0=172.25.0.0 NETMASK0=255.255.0.0 GATEWAY0=172.25.12.1

ну и в другом соответственно
ADDRESS0=192.168.0.0 NETMASK0=255.255.0.0 GATEWAY0=192.168.250.3

и даже пробовал строчки менять на
ADDRESS1=172.25.0.0 NETMASK1=255.255.0.0 GATEWAY1=172.25.12.1

ну и в другом соответственно
ADDRESS2=192.168.0.0 NETMASK2=255.255.0.0 GATEWAY2=192.168.250.3

мало ли чё..

но и это не помогло

почему я всё это пишу? потому что инфы по этому катастрофически мало! искалось во всех поисковиках, и находится всякий бред, может в red hat или fedora или других red hat based системах это и работает, но не в mandriva 2011.0

так вот опишу способ для mandriva 2011.0 (надеюсь кто-то не будет столько париться как я, а наткнётся на этот пост сразу в поисковике)
в каталоге /etc/sysconfig/network-scripts создаю 2 файла (т.к. 2 сетевых интерфейса):
route-eth1 и route-eth2
в них добавляю текст
ADDRESS0=172.25.0.0 NETMASK0=255.255.0.0 GATEWAY0=172.25.12.1

ну и в другом соответственно
ADDRESS0=192.168.0.0 NETMASK0=255.255.0.0 GATEWAY0=192.168.250.3

Перезагружаем систему — работает.

Каждый раз, как берусь писать прикладное сетевое приложение на Delphi (да, да, я им не брезгую, т.к. это отличная среда для прикладных задач и быстрой разработки), то приходится открывать книжку, на одной и той же замызганной странице, и набираю текст вручную, поэтому добавлю его сюда, и опишу как работать с UDP потоком, как со строкой.

Для начала ставим на форму компонент из вкладки Indy Servers называемый IdUDPServer, и по событию OnUDPRead в создавшейся процедуре делаем таким образом:

procedure TMainForm.srvUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
StringFormatedStream: TStringStream; //объявляем поток строкового типа
begin
StringFormatedStream := TstringStream.Create(''); //инициируем его
StringFormatedStream.CopyFrom(AData, AData.Size); //берём данные, поступившие нам на сервер, который слушает сеть
Memo1.Lines.Add(ABinding.PeerIP+':'+inttostr(ABinding.PeerPort)+'
'+StringFormatedStream.DataString); //полученные данные можно вывести,
например в Memo
//srv.Send(ABinding.PeerIP,ABinding.PeerPort,StringFormatedStream.DataString);
//посылаем поток дальше (это вовсе не обязательно делать, если у нас
сервер один)
StringFormatedStream.Free; //освобождаем поток
end;

И да, конечно же предварительно нужно настроить сам компонент, такие значения как DefaultPort по крайней мере, на который и будут приходить данные.

В свою очередь из другого приложения можно отправить поток простым способом через IdUDPServer или IdUDPClient — только второй не умеет принимать данные (или я об этом не знаю), таким способом
IdUDPServer.Send(IP:String, Port:Integer, 'Строка');

Протокол UDP, в отличие от его доделанного брата TCP, не поддерживает сессию, он только лишь отправляет поток данных в сеть по назначенном адресу (или широковещательному, например для сети с параметрами 192.168.1.1 максой 255.255.255.0 широковещательная отправка будет выглядеть как на адрес 192.168.1.255), и не заботится об их доставке (это можно реализовать самому, если нужно).

Теперь можно писать чат или всё, что угодно.

Это всё, такое простое, и всё равно забывается.