>>200976
>А что не гладко то?
На скрине:
время - это когда я заглядывал на новерь.
Так в указанные промежутки я в него не заходил.
Проблема в том что, когда я запрашиваю страницу для парсинга последнего поста. то этот запрос тоже отслеживается tcpdump. Сейчас я пытаюсь отслеживать временные интервалы запроса. Может стоит сменить настройки tcpdump, возможно доходят всякие блуждающие пакеты. Ну и может стоит перейти с time на datetime.
Максимальный номер поста на нулевой работает отлично. Но надо и удаленные посты подсчитывать, если они были обнаружены.
На скрине был обнаружен новый пост, но сообщение 0 новых постов. И срабатывает только раз. Надо дебажить.
>>200979
Это я читал. Но в питоне tab или 4 пробела это синтаксический элемент, формирующий блоки кода. Если его похерить, то код превращается в белеберду. Но, хорошо, я все равно попробую.
Это моя первая программа на питоне так что не судите строго. Да и вообще забагованный промежуточный вариант. но допиливать я его скорее всего буду только завтра ночью. А сегодня - Компай!
Код:
import sys
import os
import os.path
import time
import subprocess
import re
import urllib
import urllib.request
#import urllib.error
from urllib.error import URLError, HTTPError
delay_period_sec = 10
Message_period_sec = 60
link = "http://nowere.net/b"
file_name = "/root/Data_Post_No.dat"
command = """addr=$(host nowere.net | awk '/has address/ {print$4}');
addr="(tcp[tcpflags] & tcp-fin != 1) and (tcp[tcpflags] & (tcp-ack | tcp-syn) != 0) and src ""${addr}"" and (port 80 or port 443)";
tcpdump -i eth0 -nn "${addr}" -l """
if not os.path.isfile(file_name):
file = open(file_name, 'w+') # open file in write mode
file.write('Last_viewed = 0\n')
file.write('Status = "down"\n')
file.close()
file = open(file_name, 'r')
try:
Last_viewed = int(re.search(r'Last_viewed = (\d+)',file.readline()).group(1))
except:
Error_read == True
else:
Error_read == False
try:
Status = re.search(r'Status = "(down|up)"',file.readline()).group(1)
except:
Error_read == True
else:
Error_read == False
file.close()
if Error_read:
Last_viewed = 0
Status = 'down'
file = open(file_name, 'w')
file.write('Last_viewed = ' + str(Last_viewed) + '\n')
file.write('Status = "' + Status +'"\n')
file.close()
print('Last_viewed = ', Last_viewed)
print('Status = "' + Status + '"')
Last_reported = Last_viewed
p = subprocess.Popen(command, shell=True, bufsize=-1, stdout=subprocess.PIPE)
os.set_blocking(p.stdout.fileno(), False)
start = time.time()
Message_time = time.time()
delay = 0
while True:
#------------------------------------------
if time.time() > start + delay:
local_time = time.localtime()
disable_time_start = local_time.tm_hour * 3600 + local_time.tm_min * 60 + local_time.tm_sec
Error_flag = False
Error_text = ''
try:
f = urllib.request.urlopen(link)
except HTTPError as e:
#Error_flag = True
Error_text = 'The server couldn\'t fulfill the request.\nError code: ' + e.code
Status = "down"
except URLError as e:
#Error_flag = True
Error_text = 'We failed to reach a server.\nReason: ' + e.reason
Status = "down"
else:
site = f.read().decode('utf-8')
#last_post = re.findall(r'<span .*<a .*No\.(\d+)</a>.*</span>', site)
last_post = re.findall(r'<span class="reflink"> <a href=".{0,100}">No\.(\d+)</a> </span>', site)
Max_No = max(list(map(int, last_post)))
Status = "up"
# for No in last_post:
# print(No)
print("Max No ", Max_No)
local_time = time.localtime()
disable_time_end = local_time.tm_hour * 3600 + local_time.tm_min * 60 + local_time.tm_sec
#print("nothing happening")
delay += delay_period_sec
#break
tcp_loop = True
#------------------------------------------
tcp_viewed = False
while tcp_loop:
# first iteration always produces empty byte string in non-blocking mode
line = p.stdout.readline()
if line != b'':
visit_time_string = re.search(r'\d{1,2}:\d{1,2}:\d{1,2}',line.decode('utf-8')).group(0)
visit_time_list = list(map(int,re.split(':', visit_time_string)))
visit_time = visit_time_list[0] * 3600 + visit_time_list[1] * 60 + visit_time_list[2]
if disable_time_start <= disable_time_end:
if not ((visit_time >= disable_time_start) and (visit_time <= disable_time_end)):
tcp_viewed = True
print(visit_time_string)
else:
if not (((disable_time_start <= visit_time) and (visit_time <= 24*3600 -1)) or ((0 <= visit_time and visit_time) <= (disable_time_end))):
tcp_viewed = True
print(visit_time_string)
else:
tcp_loop = False
#------------------------------------------
if tcp_viewed == True:
Last_viewed = Max_No
if time.time() > Message_time:
file = open(file_name, 'r')
Last_viewed_file = int(re.search(r'Last_viewed = (\d+)',file.readline()).group(1))
Status_file = re.search(r'Status = "(down|up)"',file.readline()).group(1)
file.close()
print( 'Last_viewed_file ',Last_viewed_file)
print( 'Status_file ' + Status_file)
if Status != Status_file:
if Status == 'down':
#Send_Message('chan is DOWN!\n' + Error_text)
print('chan is down!\n' + Error_text)
else:
#Send_Message('chan is UP again!')
print('chan is UP again!')
if Last_viewed != Last_viewed_file:
if Last_reported < Max_No:
New_posts = Max_No - Last_viewed
#Send_Message(str(New_posts) + ' new posts')
print(str(New_posts) + ' new posts')
Last_reported = Max_No
file = open(file_name, 'w')
file.write('Last_viewed = ' + str(Last_viewed) + '\n')
file.write('Status = "' + Status +'"\n')
file.close()
Message_time += Message_period_sec
#------------------------------------------
time.sleep(0.5)
p.terminate()