Skip to content

Instantly share code, notes, and snippets.

@neoneo40
Last active October 7, 2015 00:22
Show Gist options
  • Save neoneo40/c3b14e75693e83831e4a to your computer and use it in GitHub Desktop.
Save neoneo40/c3b14e75693e83831e4a to your computer and use it in GitHub Desktop.
Combinae user, pass in python

list로 있을 때 조합 구하기

user = ['root', 'manager']
pass_ = ['123',
'456',
'asd',
'password',
'admin']

for u in user:
    for p in pass_:
        print('{}:{}'.format(u, p))

# root:123
# root:456
# root:asd
# root:password
# root:admin
# manager:123
# manager:456
# manager:asd
# manager:password
# manager:admin

file에 존재할 때 구하기

def combination_user_pass_readlines(user, pass_):
    f_user = open(user).readlines()
    f_pass = open(pass_).readlines()
    result = []
    result_append = result.append
    for u in f_user:
        for p in f_pass:
            result_append('{}:{}'.format(u.strip(), p.strip()))
    return '\n'.join(result)
        
print(combination_user_pass_readlines('tmp/user.txt', 'tmp/pass.txt'))

# root:123
# root:456
# root:asd
# root:password
# root:admin
# manager:123
# manager:456
# manager:asd
# manager:password
# manager:admin

AWK 활용해서 구하기 in Shell

$ awk 'NR==FNR{a[FNR]=$1;num=FNR}NR>FNR{for(i=1;i<=num;i++){print a[i] ":" $1}}' tmp/user.txt tmp/pass.txt

# root:123
# manager:123
# root:456
# manager:456
# root:asd
# manager:asd
# root:password
# manager:password
# root:admin
# manager:admin

for문으로 shell에서 하기

$ for pass_val in $(cat tmp/pass.txt); do for id_val in $(cat tmp/user.txt); do printf $id_val":"$pass_val"\n"; done; done

# root:123
# manager:123
# root:456
# manager:456
# root:asd
# manager:asd
# root:password
# manager:password
# root:admin
# manager:admin
  • 이게 가장 간단하네
  • 이걸로 대동단결!
  • AWK는 너무 어렵다.

내 생각

  • 어떤게 더 편할까?
  • 파이썬이냐? AWK냐?

파이썬

  • 파이썬으로 하려면 Python Iterpreter 열고 파일 open을 해야 됨.
  • 이중 for문을 돌아야 하기 때문에 pass의 Iterator가 소모되기 때문에 manager에서는 돌지 않는다. 그렇기 때문에 메모리 소모는 많지만 readlines()를 해줄 수 밖에 없다. pass의 용량이 큰 경우에 어떻게 할 것인가? 메모리에 모두 올리기 때문에 메모리 문제가 분명 발생할텐데.. Brute Forcing 작업할 경우는 당연히 pass list가 엄청 많을테니까. 그걸 한 번에 로딩하려면...

AWK

  • AWK 엄청 복잡해 보이는데... 이걸 배워서 익혀나 되나?
    • 그래도 익히면 훨씬 편하게 Shell 상에서 한 번에 할 수 있다.

최종 결론

  • 주기적으로 사용한다면 파이썬으로 깔끔하게 만들고
  • 단발적으로 사용한다면 AWK로 간단하게 만들기
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment