как увидеть конкретные установленные соединения?

Я знаю о netstat, ncat, tcpdump и некоторых других инструментах, которые показывают все соединения, но какой инструмент мне следует использовать, если я хочу увидеть конкретное соединение, установленное с конкретным сервером?

Например: я подключаюсь к www.google.com port 80 из простого веб-клиента; Мне нужна команда, которая показывает только мое соединение с "www.google.com port 80".

2
задан 7 June 2015 в 11:20

3 ответа

Необходимо проанализировать вывод netstat. В моей системе, netstat не отображает строку "Google" при списке хостов. Так, вместо простого использования netstat -t | grep -i Google, Вам было бы нужно к поиску название хоста. Что-то как:

$ sudo netstat -tn | awk '/EST/{print $5}' | sed 's/:.*//' | 
    while read ip; do 
        whois $ip | grep -qi google && echo "$ip"; 
    done
173.194.67.189
74.125.140.105
216.58.209.5

Объяснение

  • sudo netstat -tn : выполненный netstat показ только соединений TCP (-t) и числового дюйм/с (-n);
  • awk '/EST/{print $5}' : распечатайте 5-е поле (IP), если эта строка соответствует EST (покажите только установленные соединения);
  • sed 's/:.*//' : удалите порт, оставив только IP;
  • while read ip; do ...; done : выполните итерации по каждому найденному IP;
  • whois $ip | grep -qi google : поиск IP и поиск вывод для google. -i означает нечувствительный к регистру поиск и -q подавляет вывод.
  • && echo "$ip" : если grep было успешно, распечатайте этот IP.
5
ответ дан 7 June 2015 в 11:20

Выполнение команды netstat с флагами -tanp на Ubuntu перечислит весь PIDs (Идентификационные номера Процесса) и порты каждого соединения.

ПРИМЕЧАНИЕ : для наблюдения всего PIDs, необходимо выполнить команду с sudo полномочия так sudo netstat -tanp

, например,

enter image description here

0
ответ дан 7 June 2015 в 11:20

Я записал программе C++ названный addressid, который использует команду netstat с whois утилитой. На 14,04 whois утилита не прибывает 'запас из поля', таким образом, необходимо будет установить через командную строку, а также существенный для сборки для компиляции файла класса в двоичный файл.

:~$ sudo apt-get install build-essential -y

:~$ sudo apt-get install whois -y  

программа также ожидает, что два других каталога будут существующими,/usr/local/addressId и/var/log/addressid, таким образом, необходимо будет создать их:

:~$ sudo mkdir -p -m0755 /usr/local/addressId

:~$ sudo mkdir -p -m0755 /var/log/adressid

Копия программа в gedit текстовый редактор, затем скомпилируйте программу как показано ниже:

:~$ g++ -o adressid addressId.cpp

Следующее перемещение программа к/usr/bin (который уже находится в Вашем $PATH) и используют новую утилиту из командной строки как показано ниже

:~$ sudo mv addressid /usr/bin/

:~$ sudo addressid

, необходимо запустить программу как корень, потому что netstat утилита требует полномочий пользователя root отобразить все системы tcp информация.

//*******************************************************************
// This addressId.cpp class is created to input the output from   
// the netstat -tanp command and create a shell script that will be         
// executed performing the ip address (a dotted quad) look up on the   
// whois server (with whois utility).  
// author:GeoWade
//*******************************************************************

#include <iostream>
#include <fstream>
#include <string>
#include <list>
#include <cstdlib>
#include <cstring>
#include <locale>

using namespace std;

const int MAX_INDY = 300;

int main()
{

    // create string variables
    string line;
    string holdWord = "";

    // create a string array to hold the ip addresses
    string holdArry[MAX_INDY];

    // create string variables to be used as test vars in regexs
    string theTcp = "tcp";
    string firstLn = "0.0.0.0";
    string theSix = "tcp6"; 

    // create list<string> container object to hold input strings
    list<string> addressList;

    // create integer variables
    int index;
    int cardex;
    int count = 0;

    // use the system function to execute the netstat command and the data
    system("sudo netstat -tanp > /usr/local/addressId/Ntstat.txt");

    // create an ifstream object 
    ifstream inFile("/usr/local/addressId/Ntstat.txt");

    while ( getline( inFile, line ) ) {

        if ( !line.compare(44,7,firstLn) == 0 ) {

            if ( line.compare(0,3,theTcp) == 0 ) {

                if ( !line.compare(0,4,theSix) == 0 ) {

                    // find the index position of the line at which point it ends 
                    cardex = line.find('\0');

                    // store the substring of the line based on index positions
                    string intermStr = line.substr(44,cardex);

                    // locate the index position of the substring at which a colon
                    // resides
                    index = intermStr.find(":");

                    // create a second substr out of the first substring.
                    holdWord = intermStr.substr(0,index);
                    addressList.push_back(holdWord);

                }
                // null the holdWord var and increment the count integer
                holdWord = "";              
                count++;

            }

        }       

    }

    inFile.close();
    cout << "The data has been inputted to the program!" << endl;

    for (int i = 0; i < count; i++) {

        string outStack = addressList.front();
        addressList.pop_front();

        holdWord = outStack;

        holdArry[i] = holdWord;
        holdWord = "";      

    }

    // create an ofstream object
    ofstream outOne;    
    outOne.open("/usr/local/addressId/myWhois.sh");
    outOne << "#! /bin/bash\n\nMYWH=\"whois\"\nUPD=\"updatedb\"\n"
           << "TDTD=\"date\"\n\n$TDTD >> "
           << "/var/log/addressid/addressid.log\n" << endl;

    for (int j = count-1; j >= 0; j--) {

        string outHold = holdArry[j];
        holdArry[j] = "";
        holdWord = outHold;

        outOne << "$MYWH " << holdWord << " >> "
               << "/var/log/addressid/addressid.log" 
               << "\n" << endl;
        holdWord = "";      

    }

    outOne << "$UPD\n\nexit\n" << endl;

    outOne.close();

    system("chmod +x /usr/local/addressId/myWhois.sh");

    system("/usr/local/addressId/myWhois.sh");

    // delete the previously created and executed my
    system("rm -rf /usr/local/addressId/myWhois.sh");

    count = 0;
    addressList.clear();

    // output a statement to the user of the binary
    cout << "The operation has completed successfully!" << endl;
    return 0;

}

я записал эту программу приблизительно 3 года назад, назад на 12,04 как часть безопасности и регистрирующегося комплекта, который я создал. Тем не менее это зарегистрирует каждый адрес и те адреса информация, когда это будет, работал, это также добавляет дату к журналу каждый раз, когда это, работал. Можно просмотреть журнал при помощи команды кошки или сделать резервное копирование как показано ниже

:~$ cat /var/log/addressid/addressid.log

или

:~$ cat /var/log/addressid/addressid.log >> $HOME/addressid.log.bak

, Программа законна, я просто удалил свой/usr/bin/addressid, скопировал программу (чтобы проверить, что не было никаких ошибок) от этой веб-страницы, скомпилировал его, и выполните необходимый sudo mv addressid/usr/bin/, и выполнил его как sudo addressid.

0
ответ дан 7 June 2015 в 11:20

Другие вопросы по тегам:

Похожие вопросы: