Auto login gmail bằng Bash Shell

Tình hình là mình muốn làm 1 chương trình bash shell.
phần mềm tự động điền email và password để login vào gmail
và chương trình tự động mở thẳng vào mail bằng trình duyệt mà không cần qua trang login.
xin các bạn chỉ dạy và giúp đỡ. mình cám ơn nhiều

không làm được bạn ạ, bash và trinh duyệt là 2 thứ khác nhau.
Giống như bạn dùng điện thoại đã đăng nhập gmail và muốn máy tính cũng sử dụng email đó cũng login luôn khi bạn vừa mở trình duyệt vậy. Về cơ bản là 2 thứ khác nhau

Thay vì làm vậy thì có thể dùng auto fill của trình duyệt, vào trang web là tự động fill luôn.

Nếu muốn tự động hoàn toàn thì tìm hiểu về userscript. Nói ngắn thì sẽ inject 1 đoạn javascript vào, cứ khi nào url có dạng gmail/login thì auto fill và auto click nút login. Việc inject thì tampermonkey đã làm hộ, code auto là do bạn viết

3 Likes
  1. Giả sử đã có 01 account trên 01 trang web nào đó (twitter, gmail, …). Viết chương trình
    shell để vào thẳng trang web đó mà không phải login. Ví dụ, chạy chương trình shell này thì
    vào thẳng hộp thư gmail của bạn mà không cần login.

thế ông thầy giao cho bài tập mới chết :sob:

mình có tham khảo trên stackoverflow, có bạn gợi ý là dùng curl. nhưng mình mò mãi vẫn chưa làm đc bài

thế chịu rồi, bạn có lời giải từ thầy post mình học tập với nhé

1 Like

Tớ post lại câu hỏi của @tyshipper582 ở đây, mục đích nếu ai có thể giúp cậu có thể up to date với thông tin.

Cậu có nói cậu đã mò curl mòn phím rồi, cậu có thể tóm tắt những nỗ lực cậu đã làm được không? :smiley: Có thể nó sẽ giúp ích cho mọi người ở đây.

1 Like

mình có search google với key là auto login website with bash shell
mình thấy khá nhiều bài liên quan tới curl
và mình install curl và gõ

curl --help

rồi mình tìm thấy

curl -u <user:pass> url

mình thử thì nó không hoạt động

khi bạn curl tới 1 địa chỉ http, nó sẽ response về cho biết có thành công hay không
bạn tìm hiểu về http response status code để biết xem mình gửi request thành công hay fail, và nếu failed thì là vì lý do gì.

biét lý do rồi thì mới tìm cách sửa được

3 Likes

mình muốn tạo 1 chương trình bash shell cho phép mình nhập user&password và địa chỉ web
sau đó run thì chương trình mở trang web đó là tự động đăng nhập tài khoản mình đã thiết lập ở chương trình.
bác nào biết thì chỉ dùm em, em mò curl mòn phím mà vẫn chưa được
code của em:

#!/bin/bash
curl -u user:pass http://web.com
xdg-open http://web.com
exit 0

Câu hỏi của cậu cũng hoàn toàn khác với những gì đề bài ra, tớ nghĩ là cậu hiểu sai rồi :smiley:

3 Likes

cậu cho mình vài gợi ý thêm được không, hay cho mình key search google được không ???

Mình đoán là mục tiêu của bài tập của bạn là dùng bash shell để gửi http request đến một địa chỉ nào đó, thông tin login là data để gửi đi

Việc login bằng cách này có được hay không là tuỳ vào website đích mình muốn thử. Gmail thì chắc là không làm được rồi đó.

Nếu cách hiểu của mình là đúng, thì bạn có thể tìm hiểu với một số keyword sau:

curl HTTP GET POST request
json param data authentication header

3 Likes

mình có thấy keyword json nhưng chưa tham khảo
mình vẫn nghĩ là curl sẽ hoạt động nhưng mình dùng chưa đúng cách
cám ơn cậu nhá, để mình mò thêm tý nữa xem sao

Về cơ bản, nếu không login, cậu buộc phải tìm được 1 API cho phép lấy thông tin mà cậu cần (hiển nhiên cậu vẫn cần credential rồi :smiley: ). Cái này cậu cần tự tìm hiểu trên document của họ.

Tớ lấy ví dụ với gmail, Gmail có 1 API là https://mail.google.com/mail/feed/atom, nơi mà cậu có thể gửi 1 lệnh GET cơ bản để lấy hết inbox của cậu, chỉ cần username và password (xem code ở github).
Tuy nhiên, tiếc rằng giờ cậu không thể, do gmail đã cập nhật lại trong Gmail document:

Note: This feed is only available for Gmail accounts on G Suite domains.

Trong trường hợp của Gmail, cậu thử tìm trong Gmail document xem có API nào giúp cậu làm điều đó không? Nếu không có, cậu buộc phải reverse engineer cách login vào gmail (họ implement khá phức tạp đấy), rồi viết script để thực hiện hoàn toàn các thao tác đó.

EDIT: @tyshipper582 Trong trường hợp Gmail’s atom tớ nêu ở trên, có vẻ như cậu vẫn lấy được dữ liệu, nhưng cậu cần cookie cho việc đó.
Nếu cậu vẫn muốn làm theo cách này, cậu buộc phải tìm cách reverse engineer cách Gmail sinh ra cookie. Cậu có thể tìm nó trong document của google :grinning:

3 Likes

cậu lấy ví dụ là 1 web ít phức tạp hơn như được không
như nhaccuatui.com, phimmoi.net, truyentranh8.com, daynhauhoc.com

Hờ hờ, thế tớ lấy ví dụ cực kỳ phức tạp về daynhauhoc.com nha.
Trang này rất khó, cậu cần thực hiện 1 câu lệnh vô cùng phức tạp, đòi hỏi kỹ thuật cũng như hiểu biết vô cùng cao.
Với câu lệnh đó, cậu vào được daynhauhoc, đọc hết tất cả các thông tin của từng câu hỏi, biết được ai đã trả lời câu hỏi gì, ai mới trả lời vào thread đó…

Đây là câu lệnh của cậu:

curl 'https://daynhauhoc.com'
3 Likes

https://crunchbang.org/forums/viewtopic.php?id=27453
mình tìm được bài này có vẻ khả quan nhưng chưa hiểu lắm
cậu tham khảo rồi giúp tớ với

Cậu có thể cho tớ biết cậu chưa hiểu chỗ nào được không Hậu? :grinning:

2 Likes

tớ không hiểu chỗ

-cmd=authenticate
-login=Login

:(((
những web khác form nó khác và mình hông biết uyển chuyển nó ra sao ấy

Tớ e là cậu chưa có background về web rồi. Sẽ rất khó để giải thích chi tiết cho cậu.
Tớ sẽ đưa ra 1 lời giải thích đơn giả cho link cậu vừa đưa. Cách họ làm là phân tích HTML source của trang login đó.
Trong phần đó, nếu cậu có thể “may mắn” kiếm được thông tin của login API cùng với các field của request data trong thẻ (cmd với login mà cậu thắc mắc đó), thì cậu có thể may mắn tái hiện lại bằng curl.
Cậu không thể làm tương tự với Gmail được đâu, họ dùng OAuth nếu tớ không nhầm.


Cách cậu giải quyết bài tập kia, cậu có 2 cách để làm.
Cách đầu tiên:

  1. Reverse engineer trang web mà cậu cần thực hiện login để biết các bước xác thực mà trang web đó implement. Cậu buộc phải có kiến thức cơ bản về web UI cũng như cách implement login (cách xác thực người dùng, nói theo cách khác) để làm được việc này. Việc phân tích HTML để tìm cách gọi login API là 1 cách.
  2. Từ các bước xác thực đó, cậu tái hiện lại bằng shell script. Thường thì cậu sẽ gọi API, nên cậu có thể dùng curl để thực hiện các bước login.

Vì có nhiều tiêu chuẩn/phương pháp xác thực người dùng, cậu sẽ phải phân tích rất nhiều mới có các bước cho từng phương pháp xác thực người dùng, và chuyển các bước đó sang shell script.

Cách thứ 2:

  1. Đọc developer document của trang web đó, xem họ có cung cấp API để lấy dữ liệu về không.
  2. Implement shell script theo hướng dẫn của document đó để lấy thông tin cậu cần.

Với Gmail, họ có Gmail API, cậu có thể đọc và implement shell script phù hợp. Nó sẽ mất thời gian đó.

Tớ nghĩ đó là lý do lớn cho việc đề bài dưới đây là không thực tiễn, vì không có 1 script nào có thể “vào thẳng trang web mà không cần login” với “1 trang web nào đó”:

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?