Перепись населения Star Conflict

Всем привет!  ![:)](<fileStore.core_Emoticons>/emoticons/001.png “:)”)
Торжественно открываю ивент на перепись населения Star Conflict: ts2.scorpclub.ru  ![:015j:](<fileStore.core_Emoticons>/emoticons/015j.png “:015j:”) Надеюсь на вашу помощь и поддержку в данном треше  ![:012j:](<fileStore.core_Emoticons>/emoticons/012j.png “:012j:”)

 

Как участвовать в данном мероприятии:

  1. Скачать архив по ссылке: https://yadi.sk/d/jcVr7YOd3UvhXX
  2. Распаковать содержимое архива в отдельную папку (а это аж целых два файла activscan.exe и Newtonsoft.Json.dll).
  3. Запустить и войти в игру Star conflict. (если игра уже запущена, то лучше перезапустить, что бы прога не читала лишние логи)
  4. Открыть игровой чат и установить ввод в поле ввода чата (должен мигать индикатор ввода текста)
  5. Запустить activscan.exe.
  6. Выбрать пункт SC population census.
  7. Нажать кнопку Start.
  8. Теперь дайте программе спокойно поработать)

 

Примечания:

  1. При запуске модуля SC population census программа будет запрашивать с сервера пачку uid (10шт) и искать их никнеймы методом ping-pong (или просто по человечески - пинговать). После того, как он пропингует пачку этих никнеймов, он отправит найденные 10 никнеймов на сервер. После чего цикл повторяется.
  2. Сервер выдает пачку никнеймов, основываясь на том, у которых uid еще нет никнеймов. Поэтому может возникнуть дубль проверки некоторых uid (одну и ту же пачку могут взять несколько activscan.exe клиентов). Защита от данного казуса встроена, но отключена, так как очень сильно начинает загружать ЦП (слишком много нужно проверять записей в таблице - какие uid были взяты, а какие еще нет). Пришлось включить.
  3. При движении мышкой, программа приостанавливает свою работу на 3 сек. 
  4. По идее можно добавить возможность регистрировать кто сколько никнеймов перебрал (добавил опрос)

 

UPD : В скором времени перенесу ~57к никнеймов с schistory.space.

Первый подводный камень - обнаружил странный баг с uid 81.

В игре по uid=81 проживает никнейм UnDeadMoroz. Но! если смотреть uid данного никнейма через публичный апи SC, получаем соверешшно другую картуну (uid=89080). Как так то?  ![:015j:](<fileStore.core_Emoticons>/emoticons/015j.png “:015j:”)
Что бы не пинговать данного пилота снова и снова пришлось включить на стороне сервера режим распределения вывода uid.

Привет! Ты на C# же пишешь?

6 минут назад, _KOPM сказал:

Привет! Ты на C# же пишешь?

Да) Пытался как то на С++, но решил не заморачиваться. Поэтому для работы програмки обязательно наличие Framework.net 4.5

НЯП, ты решил схитрить и задействовать большее количество машин для сканирования))

Тогда используй еще это:

https://jakeroid.com/ru/blog/mnogopotochny-e-prilozheniya-v-c-dlya-chajnikov.html

Там очень просто расписано как использовать многопоточность - ускоришь процесс еще в несколько раз.

9 минут назад, _KOPM сказал:

НЯП, ты решил схитрить и задействовать большее количество машин для сканирования))

Тогда используй еще это:

https://jakeroid.com/ru/blog/mnogopotochny-e-prilozheniya-v-c-dlya-chajnikov.html

Там очень просто расписано как использовать многопоточность - ускоришь процесс еще в несколько раз.

Многопоточность это конечно хорошо) Оно даже там используется, например для одновременного чтения логов и выполнеия самого скрипта) Кстати, логи читаются через потоковый читатель StreamReader, что позволяет не перечитывать логи каждый раз целиком, а читать только новые сточки) Так же есть дополнительный поток, который удерживает игру в активном состоянии - это конечно уже на грани автоматизации и читерства, но все же во благо)
Но вот СК не любит, когда в его чат пишешь чаще, чем нормальный человек - выкидывает из игры, а потом вообще начинает банить через несколько таких попыток)

Добавил возможность записывать никнейм того, кто первый нашел пару uid-nickname. Для этого нужно скачать новую версию activscan.exe по ссылке: https://yadi.sk/d/jcVr7YOd3UvhXX И вписать свой никнейм в поле Searcher nickname (optional). По умолчанию данное поле пустое и на сервере воспринимается как НЛО  ![:015j:](<fileStore.core_Emoticons>/emoticons/015j.png “:015j:”) 100 лучших никнеймов будут висеть в таблице на главной странице ts2.scorpclub.ru  ![:)](<fileStore.core_Emoticons>/emoticons/001.png “:)”)

 

UPD:  Кому интересна вся эта тема с программированием, выкладываю скрипт на python3 для перебора никнеймов через открытую API SC:

  1. Простой перебор никнеймов, содержащие латински буквы и цифры: 

Скрытый текст

import urllib.request
import itertools
import os

def Check(nickname):
	buffer = GetWeb("http://gmt.star-conflict.com/pubapi/v1/userinfo.php?nickname=" + nickname)
	if '"result": "error"' in buffer:
		return
	else:
		print(nickname)
		buffer = GetWeb("http://ts2.scorpclub.ru/api/v1/addnickname.php?nickname=" + nickname)
#end define

def GetWeb(url):
	fp = urllib.request.urlopen(url)
	mybytes = fp.read()
	mystr = mybytes.decode("utf8")
	fp.close()
	return mystr
#end define


###
### Start program
###

start = 1
if (os.path.isfile("backup")):
	file = open("backup")
	start = int(float(file.read()))
	file.close()
#endif

EN_UPPER = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
EN_LOWER = "abcdefghijklmnopqrstuvwxyz"
RU_UPPER = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"
RU_LOWER = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"
DIGITS = "1234567890"
while start < 16:
	file = open("backup", 'w')
	file.write(str(start))
	file.close()
	for item in itertools.product(EN_UPPER + EN_LOWER + DIGITS, repeat=start): #itertools.random_product
		nickname = ''.join(item)
		Check(nickname)
	#end for
	start = start + 1
#end while

 

 

  1. Перебор по словарю: 

Скрытый текст

import urllib.request
import itertools
import os

def Check(nickname):
	buffer = GetWeb("http://gmt.star-conflict.com/pubapi/v1/userinfo.php?nickname=" + nickname)
	if '"result": "error"' in buffer:
		return
	else:
		print(nickname)
		buffer = GetWeb("http://ts2.scorpclub.ru/api/v1/addnickname.php?nickname=" + nickname)
#end define

def GetWeb(url):
	fp = urllib.request.urlopen(url)
	mybytes = fp.read()
	mystr = mybytes.decode("utf8")
	fp.close()
	return mystr
#end define


###
### Start program
###

file = open("list.txt")
for line in file:
	line = line.replace('\r', '')
	line = line.replace('\n', '')
	Check(line)
file.close()

 

 

  1. Так же теперь можно посмотреть все никнеймы определенной длины, которые есть в базе: http://ts2.scorpclub.ru/api/v1/getnicknames.php?length=15, где 15 - это длина никнейма ![:)](<fileStore.core_Emoticons>/emoticons/001.png “:)”)

Скрипты конечно же написаны на коленке и есть что дорабатывать ![:)](<fileStore.core_Emoticons>/emoticons/001.png “:)”)

В 30.04.2018 в 12:14, Igroman787 сказал:

100 лучших никнеймов…

Оптимистический оптимист 

aa2ff9924203.jpg
 

5 минут назад, Notip сказал:

Оптимистический оптимист 

Это даа  ![:D](<fileStore.core_Emoticons>/emoticons/005j.png “:D”)
PS : Спасибо за участие в данном треше  ![:012j:](<fileStore.core_Emoticons>/emoticons/012j.png “:012j:”) Может найду на складе что нибудь полезное для тебя ![:)](<fileStore.core_Emoticons>/emoticons/001.png “:)”)

сервер неожиданно умер  ![:D](<fileStore.core_Emoticons>/emoticons/005j.png “:D”)

UPD : Сервер заработал. Причина смерти - отключено администрацией из за высокой нагрузки на CPU  ![:006j:](<fileStore.core_Emoticons>/emoticons/006j.png “:006j:”) Пришлось искусственно ограничить мощность сервера, что бы админы не ругались  ![:004j:](<fileStore.core_Emoticons>/emoticons/004j.png “:004j:”)

В 01.05.2018 в 16:47, Igroman787 сказал:

сервер неожиданно умер  ![:D](<fileStore.core_Emoticons>/emoticons/005j.png “:D”)

UPD : Сервер заработал. Причина смерти - отключено администрацией из за высокой нагрузки на CPU  ![:006j:](<fileStore.core_Emoticons>/emoticons/006j.png “:006j:”) Пришлось искусственно ограничить мощность сервера, что бы админы не ругались  ![:004j:](<fileStore.core_Emoticons>/emoticons/004j.png “:004j:”)

Хочешь определить кол-во играющих? 

В 27.05.2018 в 01:05, NikMAX сказал:

Хочешь определить кол-во играющих? 

Нет. Хочу завершить внутренности сервиса schistory.space ![:)](<fileStore.core_Emoticons>/emoticons/001.png “:)”)

Просто информация по ходу развития проекта  ![:)](<fileStore.core_Emoticons>/emoticons/001.png “:)”)

  1. Всего найдено 192344 никнеймов, что примерно составляет 5,7% от общего количества.

     
  2. К сожалению разработчики не хотят не могут нам предоставить весь список игроков SC, сослав на открытую api SC. Поэтому было решено разработать новое тяжелое вооружение: Python скрипт, перебирающий все возможные комбинации никнеймов через открытую api SC, способный перебирать до 50000 никнеймов в секунду через разные прокси, найденные в сети. В данный момент скрипт проходит бетатест.

     
  3. И спасибо всем вам за поддержку проекта!  ![:fed012:](<fileStore.core_Emoticons>/emoticons/fed012.png “:fed012:”)

 

UPD: Надеюсь меня не забанят за такое ![:D](<fileStore.core_Emoticons>/emoticons/005j.png “:D”)

Вот и подошел к концу проект “перепись населения SC”  ![:fed001:](<fileStore.core_Emoticons>/emoticons/fed001.png “:fed001:”) Всего найдено 3 313 203 никнейма  ![:fed006:](<fileStore.core_Emoticons>/emoticons/fed006.png “:fed006:”) 


В скором времени начну дорабатывать серверную часть для работы с мертвыми никнеймами и перенесу все найденные никнеймы на сервер schistory.space  ![:santa:](<fileStore.core_Emoticons>/emoticons/santa.gif “:santa:”)
Фрагмент видео, когда запустил программу со старыми игровыми логами  ![:shturm_light:](<fileStore.core_Emoticons>/emoticons/shturm_light.gif “:shturm_light:”)

И всем большое спасибо за участие в данном треше! Особенно [Notip](< base_url >/index.php?/profile/1100115-notip/ “Перейти в профиль Notip”)  ![:fed012:](<fileStore.core_Emoticons>/emoticons/fed012.png “:fed012:”)