mario
Март 22, 2008 22:35:35
Добрый день.
Вопрос такой. К примеру существует у-во (/dev/n), к которому требуется обращаться, чтобы распарсивать информацию в него упавшую.
f=open('/dev/n', ‘r’, 1024) / успешно открывает
while 1:
print f.read() виснет / но просто (f.read(10)) делает успешно
Как лучше это сделать, чтобы эта информация по формату была Turple или List?
shiza
Март 22, 2008 23:02:21
только не виснет, а ждет конца файла и явно недождется =)
Когда читаешь порциями по 10 байт - явно лучше =)
Распарсивать придется налету. А уж как - зависит от протокола данных, которые шлет это /dev/n
mario
Март 22, 2008 23:19:10
Там различный сетевой трафик, приоритетно ethernet. Можно ли сделать чтобы как то интерактивно это отображалось?
shiza
Март 22, 2008 23:49:32
так-как информация у тебя там не текстовая а двоичная, думаю что лучше и файл открывать в двоичном режиме.
типа так
f = open(('/dev/n', 'rb')
mario
Можно ли сделать чтобы как то интерактивно это отображалось?
ну выводи на экран =)
Правда символы там будут часто попадаться непечатные, поэтому наверное лучше перевести их в HEX например.
mario
Март 23, 2008 00:22:50
Это я понимаю, спасибо. Но это не совсем интерактивно тогда (
Мне нужно, чтобы при прихоже на у-во новой информации она бы выдавалась через питоний скрипт
shiza
Март 23, 2008 00:46:10
не очень понимаю что ты имеешь ввиду.
что значит интерактивно и куда выдавалась?
mario
Март 23, 2008 11:32:42
На у-во попадает различный сетевой трафик, приоритетно Ethernet.
Требуется обращаться к ниму скриптом на питоне, открывать его и считывать информацию, которая туда попадает. Scapy, py-pcapy, пожалуйста не предлагать. Меня интересует сам подход к тому, как открыть (понял как открыть), как считывать и сразу выводить (представьте как работает tcpdump. такой глобальной работы мне не надо, но суть чтобы читать и выводить, то что считали (но там есть нечитаемые символы имхо)).
Это циклом надо организовывать ведь? Имел ли кто дело с struct для задания структуры и парсингом по структуре?
shiza
Март 23, 2008 12:53:24
ну да. я думал насчет цикла ты сам уж подставишь. :)
f = open('/dev/n', 'rb')
while 1:
s = f.read(1) #читаем по одному (пока так - для упрощения) символу
print hex(ord(s)).replace('0x', ''), #переводим в 16-ричный вид и выводим на экран
shiza
Март 23, 2008 12:57:28
Ага. вот ты упомянул tcpdump.
как я понимаю теперь задача стои: выделить из трафика заколовки пакетов и попробовать распознавать их?
mario
Март 23, 2008 14:43:46
Спасибо, с первым разобрался.
> как я понимаю теперь задача стои: выделить из трафика заколовки пакетов и попробовать распознавать их?
Есть такое да … Не подскажите с этим?