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
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 '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 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는 너무 어렵다.
- 파이썬으로 하려면 Python Iterpreter 열고 파일 open을 해야 됨.
- 이중 for문을 돌아야 하기 때문에 pass의 Iterator가 소모되기 때문에 manager에서는 돌지 않는다. 그렇기 때문에 메모리 소모는 많지만 readlines()를 해줄 수 밖에 없다. pass의 용량이 큰 경우에 어떻게 할 것인가? 메모리에 모두 올리기 때문에 메모리 문제가 분명 발생할텐데.. Brute Forcing 작업할 경우는 당연히 pass list가 엄청 많을테니까. 그걸 한 번에 로딩하려면...
- AWK 엄청 복잡해 보이는데... 이걸 배워서 익혀나 되나?
- 그래도 익히면 훨씬 편하게 Shell 상에서 한 번에 할 수 있다.
- 주기적으로 사용한다면 파이썬으로 깔끔하게 만들고
- 단발적으로 사용한다면 AWK로 간단하게 만들기