溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

ruby自動加域腳本

發(fā)布時間:2020-07-17 14:02:16 來源:網(wǎng)絡(luò) 閱讀:577 作者:nonono11 欄目:編程語言

公司在異地有分公司。那邊要加入域。然后權(quán)限等等。。。還有就是ruby學(xué)習(xí)一下。。。

require 'net/ldap'
require 'net/telnet'
require 'net/http'
require 'openssl'  
require 'base64' 
require 'highline/import'     #隱藏輸入字符 gem install highline

ALG = 'DES-EDE3-CBC'  
KEY = "masdsdff"              #你的密鑰  只能8位
DES_KEY = "nseewW3E"          #任意固定的值

def check_pass(auth)
puts "Input Your Username"
username = STDIN.gets.chomp
password = ask("Input Your Password") { |q| q.echo = "*" }

ldap = Net::LDAP.new
ldap.host = "fw.163.net"
ldap.port = 389

result = ldap.bind_as(
:base => "ou=People,dc=163,dc=net",
:filter => "(uid=#{username}))",
:password => password
)

if result
    auth.include?(username) ? true : false
else
    false
end
end

def check_network()
    begin
        Net::Telnet::new("Host" => "ad.163.net", "Port" => 80, "Telnetmode" => false)
    rescue
        puts "Can't Connect AD, Please Check Network."
        sleep 10
        exit
    end
end

def check_hostname()
  if ENV["COMPUTERNAME"].downcase.scan("hw").count > 0
    puts "Please Change Hostname And Restart PC"
    sleep 10
    exit
  end
end

def usage()
help=<<EOF

    Usage: script username password
    
EOF
puts help
end
 
def add_domain(secret)
  #'user1|user2||domain admin|domain admin pass|current pass'  
  result = `netdom.exe join #{ENV["COMPUTERNAME"]} /domain:163.net /userd:#{secret[2].strip} /passwordd:#{secret[3].strip} /usero:#{ENV["USER"]} /passwordo:#{secret[4].strip}`
  result.scan("success").count > 0 ? true : false
end

def encode(str)  
  des = OpenSSL::Cipher::Cipher.new(ALG)  
  des.pkcs5_keyivgen(KEY, DES_KEY)  
  des.encrypt  
  cipher = des.update(str)  
  cipher << des.final  
  return Base64.encode64(cipher) #Base64編碼,才能保存到數(shù)據(jù)庫  
end  
   
def decode(str)  
  str = Base64.decode64(str)  
  des = OpenSSL::Cipher::Cipher.new(ALG)  
  des.pkcs5_keyivgen(KEY, DES_KEY)  
  des.decrypt  
  des.update(str) + des.final  
end  

#-----------------------
check_network()
#usage() 本來用參數(shù),現(xiàn)在改輸入
secret = decode(Net::HTTP.get(URI('http://fw.163.net/auth.dat')).chomp).split("|")

if check_pass(secret)    
    check_hostname()
    if add_domain(secret)
        puts "Add users to the local administrators group? (Y|N)"
        if STDIN.gets.scan(/[yY]/).count > 0
            puts "Please enter a user to join the administrators group"
            `net localgroup administrators 163.net\\#{STDIN.gets.chomp} /add`
        end
        puts "Join a domain successfully"
    else
        puts "Join a domain fail"
    end    
    sleep 10
    exit
else
    puts "1: username or password err; 2: unauthorized"
    sleep 10
    exit
end


然后用 ocra 編譯為exe (ocra 直接 gem install ocra, 這個感覺比exerb、rubyscript2exe好)

同時程序需要 netdom.exe netapi32.dll


注,加密的是在網(wǎng)上找的。忘記哪了。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI