PDA

Просмотр полной версии : Перехват пакетов используя NAT


ks_
29.01.2013, 18:50
Хотелось бы описать способ перехвата пакетов использующий linux ОС.
Чем то похоже на эту (http://coderx.ru/showthread.php?t=5879) тему. С той разницей, что там используется Windows, KerioWinRouteFireWall и L2PacketHack. Здесь Linux(в нем iptables) и самописный приемник. Пример делал для РПГ-клаба, структуры пакетов взял из ini l2PH.

Прописываем гейтвей(вместо роутера, тот что в доме, на IP адрес виртуальной машины). или в моем случаем просто прописаны маршруты с меньшей метрикой.
https://lh3.googleusercontent.com/-cf7iDzVn-cU/UQfQOvtpVxI/AAAAAAAADTY/zgSbBSZaPC8/s770/routingWindows.jpg


Прописываем форвардинг NAT в iptables. Теперь пришедшие пакеты, будут идти на localhost на соответствующий порт.
https://lh5.googleusercontent.com/-rLaEWCEoQdk/UQfQOWmQ_nI/AAAAAAAADTU/UUDFkrhU5a0/s686/iptables.jpg


Запускаем приемник.
https://lh6.googleusercontent.com/--El2OfnpnqY/UQfQPDrfjQI/AAAAAAAADTg/mVOsDFi6FIM/s836/run.jpg

s_UserInfo: b't\x00e\x00s\x00t\x00d\x00s\x00a\x00f\x00a\x00s\x 00d\x00f'
Видно, что соединение установлено.
https://lh6.googleusercontent.com/-pDy0LN3h7VY/UQfQO-jaLPI/AAAAAAAADTc/kOl4Yn-wG38/s1103/helloWorld.jpg

St1mul
29.01.2013, 20:50
я что то не догоняю как они у тебя расшифрованными становятся?

ks_
29.01.2013, 21:07
я что то не догоняю как они у тебя расшифрованными становятся?
структуры пакетов взял из ini l2PH. Написал код, который переводит ини файлы в классы python, создающие структуры dtype для numpy(библиотека для пайтона)

lamo386
30.01.2013, 11:37
ks_, интересно было бы взглянуть на питон код -))

ks_
30.01.2013, 21:35
https://github.com/yv84/pyph/

Устанавливаем numpy, lxml:
sudo apt-get install python3-numpy
sudo apt-get install python3-setuptools
sudo apt-get install python3-dev
sudo apt-get install libxml2-dev
sudo apt-get install libxslt1-dev
sudo easy_install3 lxml

lamo386
31.01.2013, 02:05
мельком глянул код, сколько на это ушло времени ?
бросилось в глаза...
def t_pck(self,x): #binascii.b2a_hex(data)
x= struct.unpack('B'* len(x), x)
y=[]
for i in range(len(x)):
y.append(hex(x[i]))
z = (" ".join(y).replace('0x', ' ')+' ')
z = z.replace(' 0 ',' 00 ')
z = z.replace(' 1 ',' 01 ')
z = z.replace(' 2 ',' 02 ')
z = z.replace(' 3 ',' 03 ')
z = z.replace(' 4 ',' 04 ')
z = z.replace(' 5 ',' 05 ')
z = z.replace(' 6 ',' 06 ')
z = z.replace(' 7 ',' 07 ')
z = z.replace(' 8 ',' 08 ')
z = z.replace(' 9 ',' 09 ')
z = z.replace(' a ',' 0a ')
z = z.replace(' b ',' 0b ')
z = z.replace(' c ',' 0c ')
z = z.replace(' d ',' 0d ')
z = z.replace(' e ',' 0e ')
z = z.replace(' f ',' 0f ')
z = z.replace(' ',' ')
return z

def t_pck(self, b_srt):
return ' '.join(["%02X" % x for x in b_str])

получим строку такого вида 91 EC 02 00 B9 EE F8 75 2C 2C BF 45 или "%02x" будут маленькие буквы

ks_
31.01.2013, 02:15
мельком глянул код, сколько на это ушло времени ?
бросилось в глаза...


def t_pck(self, b_srt):
return ' '.join(["%02X" % x for x in b_str])
или "%02x" будут маленькие буквы

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