Змея / Говнокод #18061 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
try:
    ip_port = sys.argv[1].split(':')
    ip = ip_port[0]
 
    if len(ip_port) == 2:
        port = ip_port[1]
    elif len(ip_port) == 1:
        port = "80"
    else:
        raise IndexError
except IndexError:
    print "Usage: %s <target ip:port>" % sys.argv[0]
    sys.exit(1)

Эксплоиты. Неиссякаемый источник ГК.

Я бы сделал так:

try:
    ip_port = sys.argv[1].split(':')
    ip = ip_port[0]
    try:
        port = ip_port[1]
    except IndexError:
        port = 80
except IndexError:
    print "Usage: %s <target ip:port>" % sys.argv[0]
    sys.exit(1)

Запостил: 3_14dar 3_14dar, (Updated )

Комментарии (42) RSS

  • try:
        ip, port = sys.argv[1].split(':')
    except ValueError:
        ip, port = sys.argv[1], 80
    except IndexError:
        print 'Usage: %s <target ip:port>' % sys.argv[0]
        sys.exit(1)
    Ответить
  • unless ARGV.empty?
      ip, port = ARGV[0].split
      do_some_serious_hacka_shit(ip, port || 80)
    else
      puts "Usage: #{ __FILE__ } <target ip:port>
      exit
    end


    Мама меня учила, что эксепшены — это медленно. До сих пор для себя не решил, хорошо это или плохо, но стараюсь обходиться без них. Но питон все равно будет кидать эксепшн из сплита.
    Ответить
    • Ха-ха, руби.
      >Мама меня учила, что эксепшены — это медленно.
      >Парсинг командной строки
      УПОРОТ

      В руби параметры начинаются с 0? Слава богу, кто-то до этого допер.
      Ответить
  • Нормальные люди пользуются OptionParser, а не придумывают в очередной раз как распарсить аргументы.
    Если аргумент - URL, опять же есть urlparse.
    Ответить
    • urlparse для хост:порт перебор, согласись. А argparse... во первых, сплоетописатели requests и urlencode не освоили, параметры запроса делают сложением строк, не то что парсер параметров. Во-вторых, я его как-то толком не освоил, чтобы для простых программ его хуячить, да и прыщами он попахивает. Как и весь питон.
      Ответить
      • Нет, не соглашусь. Кода писать меньше, сообщения об ошибках более вменяемые.
        Не освоил? - ну так об этом же и речь.
        > прыщами попахивает
        Потэтому ты будешь лепить бездарные интерфейсы командной строки из говна и палок?

        ЗЫ. Тут еще ошибки выводятся не в тот поток.
        Ответить
        • >Потэтому ты будешь лепить бездарные интерфейсы командной строки из говна и палок?
          Пока и так работает - да. Один раз меня заебало и я таки сделал с argparse. Но если у тебя только позиционные параметры, некоторые из которых необязательные?

          >сообщения об ошибках более вменяемые.
          Которые usage?
          Ответить
    • Библиотеки библиотеки, уже и свой код в питоне пописать негде! Не отбирайте хлеб у кодописцев...
      Ответить
  • > > sys.argv[1]
    > Эксплоиты.

    если кто-то уже может манипулировать коммандные строки, то про такие "эксплоиты" поздно думать.
    Ответить
        • Ебётся он, или нет, я не знаю, но имею убеждение, что у кое-кого питоны в ЖОПЕ.
          Ответить
          • А про PHP так уже не пошутишь... Вывод: у серьёзного ЯП должно быть серьёзное название.
            Ответить
              • Опасайтесь своих желаний! Вы точно хотите, чтобы 1024 Хорси тут залогинились?
                Ответить
              • А про PHP так уже не пошутишь... Вывод: у серьёзного ЯП должно быть серьёзное название.
                1024 не пришёл, декремента хватит?
                Ответить
  • Это скорее всего с CTF, где времени на написания нормального кода нет вообще. И не такое встретишь (и сам напишешь).
    Ответить
    • Ну ты знаешь, если раньше уже писал такие парсеры - воспроизведешь по памяти или скопипастишь. Да что там - хацкеры даже модуль requests не знают и делают запрос сложением строк без эскейпинга.
      Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8