Friday 28 October 2011

Как да открием IP адреса на Skype потребител

Как да открием IP адреса на Skype потребител (от листата ни)

Това е един доста често задаван в миналото въпрос, писах статия на английски (in English), за да помогна на една приятелка от Финландия, която се съмняваше че гаджето и не и пише от къщи, а ходи другаде. Тя е линукс потребител като повечето съвременни хора ;)

Детаилите са отегчителни така или иначе, ето как се прави:

  • Проверявате какви са връзките ви в момента установени от Skype:

bash-4.1# netstat -tupan | grep skype
tcp        0      0 0.0.0.0:20530           0.0.0.0:*               LISTEN      2136/skype          
tcp        0      0 10.3.71.55:35709        213.226.8.44:6417       ESTABLISHED 2136/skype          
tcp        0      0 10.3.71.55:56213        84.255.243.158:6774     ESTABLISHED 2136/skype          
tcp        0      0 10.3.71.55:59342        93.155.194.71:30900     ESTABLISHED 2136/skype          
tcp        0      0 10.3.71.55:48004        78.128.57.94:14961      ESTABLISHED 2136/skype          
tcp        0      0 10.3.71.55:52886        212.73.140.140:18281    ESTABLISHED 2136/skype          
tcp        0      0 10.3.71.55:49665        89.106.122.17:23325     ESTABLISHED 2136/skype          
udp        0      0 0.0.0.0:20530           0.0.0.0:*                           2136/skype          
udp        0      0 127.0.0.1:33358         0.0.0.0:*                           2136/skype          
bash-4.1# 
  • Пишете бележка на човека, който ви интересува и пробвате отново.
bash-4.1# netstat -tupan | grep skype
tcp        0      0 0.0.0.0:20530           0.0.0.0:*               LISTEN      2136/skype          
tcp        0      1 10.3.71.55:33570        83.28.135.233:443       SYN_SENT    2136/skype          
tcp        0      0 10.3.71.55:56213        84.255.243.158:6774     ESTABLISHED 2136/skype          
tcp        0      0 10.3.71.55:59342        93.155.194.71:30900     ESTABLISHED 2136/skype          
tcp        0      0 10.3.71.55:48004        78.128.57.94:14961      ESTABLISHED 2136/skype          
tcp        0     97 10.3.71.55:37577        10.3.71.63:28257        ESTABLISHED 2136/skype          
tcp        0      1 10.3.71.55:54679        83.28.135.233:20489     SYN_SENT    2136/skype          
tcp        0      1 10.3.71.55:54677        83.28.135.233:20489     SYN_SENT    2136/skype          
tcp        0      0 10.3.71.55:52886        212.73.140.140:18281    ESTABLISHED 2136/skype          
tcp        0      0 10.3.71.55:39944        79.107.232.127:45423    ESTABLISHED 2136/skype          
udp        0      0 0.0.0.0:20530           0.0.0.0:*                           2136/skype          
udp        0      0 127.0.0.1:33358         0.0.0.0:*                           2136/skype          
bash-4.1# 
  • Проверявате кои редове са генерирали трафик и имат статус ESTABLISHED (установена връзка). В този случай, това е реда ---> 97 10.3.71.55:37577 10.3.71.63:28257 ESTABLISHED.
IP адреса 10.3.71.55 е на служебната ми машина, и очевидно, колегата на когото пратих бележка за тест има адрес 10.3.71.63. В общи линии това е всичко за под Линукс.

Под Windows се прави малко по-иначе, защото там няма grep и netstat няма толкова параметри, но принципа е същият. Просто трябва да си отваряте очите добре, това е резултата от компютъра на колегата под Windows:

C:\>netstat

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    bogdan:2116            10.3.172.106:22        ESTABLISHED
  TCP    bogdan:2117            10.3.155.1:22          ESTABLISHED
  TCP    bogdan:2250            10.3.131.170:3389      ESTABLISHED
  TCP    bogdan:2288            213.146.189.203:12350  TIME_WAIT
  TCP    bogdan:2292            10.3.131.52:22         ESTABLISHED
  TCP    bogdan:2298            82.137.93.70:1558      TIME_WAIT
  TCP    bogdan:2302            77.70.124.25:54477     TIME_WAIT
  TCP    bogdan:2309            213.146.189.202:12350  ESTABLISHED
  TCP    bogdan:28257           10.3.71.55:37577       ESTABLISHED
  TCP    bogdan:1807            localhost:2994         ESTABLISHED
  TCP    bogdan:2994            localhost:1807         ESTABLISHED

Ако се вгледате, има резултат който показва моят адрес 10.3.71.55 със статут ESTABLISHED. Портовете на които Скайп е установил връзка (в случая bogdan:28257 и 10.3.71.55:37577) са със случаен характер но винаги са над 25000. По това ще се ориентирате.

Можете и да си изтеглите програмката TCPView от Microsoft Sys internals, която може добре да показва връзките ви със външният свят, като филтрира и сортира протоколите по групи.

Принципът си остава - поглеждате връзките си навън, провеждате разговор с човека който ви интересува и докато го правите, отново поглеждате връзките си навън. Неговият адрес е там, в новоустановените връзки.

Thursday 27 October 2011

Как се "бриджват" 2 мрежови карти в Линукс

Още e познато като ethernet bridge. Доста често ми се налага в процеса на работа да го правя, за да подслушвам мрежов трафик за тестовете на оборудването, което произвеждаме. Писал съм и този материал на английски, ако ви е по-комфортно така (Same article in English).

Накратко, трябват Network пакетите на всеки произволен линукс. Вижте дали тези три команди ги имате: ifconfig, brctl и tc. Последното не е необходимо за bridge, но има една полезна функция, която може да искате да знаете.

bash-4.1# which ifconfig
/sbin/ifconfig
bash-4.1# 
bash-4.1# which brctl
/sbin/brctl
bash-4.1# 
bash-4.1# which tc
/sbin/tc
bash-4.1#

Самото правене на bridge (мост :) )

не е нищо особено, прави се виртуално мрежово име с brctl, добавят му се мрежови карти и се вдига с ifconfig up. В моята тестова система има 3 мрежови карти. Една за интернет и 2 за тестове.

bash-4.1# ifconfig | grep eth
eth0      Link encap:Ethernet  HWaddr 00:01:6C:27:4B:BA  
eth1      Link encap:Ethernet  HWaddr 00:06:4F:29:49:F0  
eth2      Link encap:Ethernet  HWaddr 00:01:6C:E2:FF:D2  
bash-4.1# brctl addbr br001
bash-4.1# brctl addif br001 eth1
bash-4.1# brctl addif br001 eth2
bash-4.1# ifconfig br001 up
bash-4.1# ifconfig br001
br001     Link encap:Ethernet  HWaddr 00:01:6C:E2:FF:D2  
          inet6 addr: fe80::201:6cff:fee2:ffd2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:238 (238.0 b)

bash-4.1# 

Това е всичко, което трябва. В момента ако се включат произволни 2 мрежови устройства на eth1 и eth2 те ще се виждат напълно нормално през този transparent bridge.

Има още един хитринка, която използвам в тестовете и може да ви е полезна. Чупене на трафик ;). Прави се с една команда:

bash-4.1# tc qdisc add dev eth1 root netem delay 0.3s loss 1%

С тази команда добавихме забавяне на пакетите и 1% загуба. Можете естествено да пробвате с повече. Ползва се основно за да тествате как реагират мрежови устройства и мрежов софтуер в спартанските условия на евтини квартални ланки :D

И естествено, можете да си инсталирате един Wireshark и да дъмпвате пакетите в human readable format, за да ги анализирате. С каква цел ... вие си знаете. Аз основно подслушвам пакети, за да съм сигурен, че програмистите не са объркали нещо в кода.

Wednesday 26 October 2011

Как да настроим VLAN в Linux

Преведох оригиналният материал от моят блог (same article in English) на Български, защото наскоро един колега ме попита как се прави, а не е добър с английският. (то не че е необходимо ;) )

Линукс, върви с интрументи за енкапсулиране на изходящият и декапсулиране на входящият трафик.

Всичко си е вградено в ядрото, просто инструментите за това все още са малко допотопни за вкуса на повечето линукс потребители.

Стандарта се казва 802.1q, а модула за ядрото, който поддържа VLAN се казва 8021q. Първо трябва да видите, дали ви е активен съотвеният модул за ядрото и ако не е - да го включите.

bash-4.1# lsmod | grep 802
bash-4.1# modprobe 8021q
bash-4.1# lsmod | grep 802
8021q                  18128  0

След това, трябва да настроите виртуалният лан таг, който ви интересува да приемате и да изберете на кой интерфейс ще го настроите. Може да има повече от 1 VLAN tag на един интерфейс. Всеки един таг си има собствен виртуален интерфейс, който можете да адресирате или слушате индивидуално, както и да им слагате различни IP адреси.

bash-4.1# vconfig add eth3 200
Added VLAN with VID == 200 to IF -:eth3:-
bash-4.1# ifconfig eth3.200 10.0.0.1/16 up
bash-4.1# ping 10.0.155.50 -I eth3.200
PING 10.0.155.50 (10.0.155.50) 56(84) bytes of data.
64 bytes from 10.0.155.50: icmp_req=1 ttl=63 time=0.286 ms
64 bytes from 10.0.155.50: icmp_req=2 ttl=63 time=0.286 ms
64 bytes from 10.0.155.50: icmp_req=3 ttl=63 time=0.275 ms
64 bytes from 10.0.155.50: icmp_req=4 ttl=63 time=0.281 ms
^c
bash-4.1# vconfig add eth3 150
Added VLAN with VID == 150 to IF -:eth3:-
bash-4.1# ifconfig eth3.150 100.0.0.1/16 up
bash-4.1# ping 100.0.0.2 -I eth3.150
PING 10.0.155.50 (10.0.155.50) 56(84) bytes of data.
64 bytes from 100.0.0.2: icmp_req=1 ttl=63 time=0.286 ms
64 bytes from 100.0.0.2: icmp_req=2 ttl=63 time=0.286 ms
64 bytes from 100.0.0.2: icmp_req=3 ttl=63 time=0.275 ms
64 bytes from 100.0.0.2: icmp_req=4 ttl=63 time=0.281 ms
^c
bash-4.1# 

В общи линии, това е всичко. Поради някаква причина, в дистрибуцията, която аз ползвам няма конфигурационен файл, в който всичките тези неща да се добавят, за да стартират по време на boot. За това съм добавил няколко реда в /etc/rc.local, които вършат цялата работа. Този конфигурационен скрипт се изпълнява на края, но така или иначе - приложенията които ползвам стартират след това, така че не ми пречи.

Чувствайте се свободни да го сложите където искате или да си направите собствен стартиращ скрипт, който да закачите към друг от boot скриптовете:

#!/bin/bash

echo "Setting vlans ..."
modprobe 8021q
vconfig add eth3 200
ifconfig eth3.200 10.0.0.5/16 up
vconfig add eth3 150
ifconfig eth3.150 100.0.0.1/16 up
echo "... done"