Я знаю о netstat
, ncat
, tcpdump
и некоторых других инструментах, которые показывают все соединения, но какой инструмент мне следует использовать, если я хочу увидеть конкретное соединение, установленное с конкретным сервером?
Например: я подключаюсь к www.google.com port 80
из простого веб-клиента; Мне нужна команда, которая показывает только мое соединение с "www.google.com port 80"
.
Необходимо проанализировать вывод 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. Выполнение команды netstat
с флагами -tanp
на Ubuntu перечислит весь PIDs (Идентификационные номера Процесса) и порты каждого соединения.
ПРИМЕЧАНИЕ : для наблюдения всего PIDs, необходимо выполнить команду с sudo
полномочия так sudo netstat -tanp
, например,
Я записал программе 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.