Bir bash betiğinde ikincil IP kullanımı


1

Sistemle ilgili tüm görevler için ayarlanmış bir Birincil IP'm var. Bazen sistemimi farklı testler yapmak için kullanmak zorunda kalıyorum ve çoğu zaman bash / shell scriptleri ile uğraşmak zorunda kalıyorum. Testlerin / bant genişliğinin birincil IP’den tamamen ayrı olmasını istiyorum, bu yüzden İkincil IP’yi kullanarak işlemleri yapmak istiyorum. Bunu nasıl başarabilirim?


Bu, komut dosyanızın çağırdığı komutlara bağlıdır.
Der Hochstapler 14:13

Komutlardan biri ağla ilgili olduğu ve verileri takip ettiği, ana IP adresindeki sunucuların listesini taradığı ve verileri güncellediği için aslında hiçbir komutu kullanmaz. Saf programlama diyebilirim. Bahsettiğiniz "adres adres" komutlarını kullanmayı denedim ama komutla ilgili, doğru.
Asad Moeen

Yanıtlar:


2

Bu bash ile ilgili değil, senaryoda kullandığınız komutlar hakkında da değil. Tipik olarak, kaynak IP, hedef IP'ye göre seçilir. Bazı araçlar kaynak IP'yi belirtmenize izin verebilir veya komut dosyasını örneğin uid / gid komutuyla eşleştirebiliyorsanız kaynak IP'yi yeniden yazabilirsiniziptables .

AFAIK, işlemlere kaynak IP adresleri eklemenin bir yolu yoktur (ve ayrıca devralmak için alt işlemlere de ihtiyacınız olacaktır). IP kaynağını yeniden yazmakta sorun yaşıyorsanız, komut dosyası işlemini özel bir grup kimliğine geçirebilirsiniz:

Kök olarak:

ip4_address=... # fill in your ipv4 address
group=secondaryip # or any other name

groupadd $group
usermod your-user -aG $group # not needed for the root user

iptables -t nat -A POSTROUTING \
    -m owner --gid-owner $group \
    -j SNAT --to-source $ip4_address

Komut dosyasını kullanarak çalıştırın:

sg secondaryip "/path/to/your/script arg1 arg2"

Alternatif olarak, komut dosyalarınızı kullanarak tek tek komutları da çağırabilirsiniz sg. Daha fazla bilgi için kılavuz sayfasını okuyun. Ek olarak, betiğinizin kendi başına komut ile çalışmasını sağlamak için püf noktaları da vardır, sgancak buna çok ihtiyaç duymamanız gerekir. Klasik newgrpkomutu kullanabilir ve bir kabuk betiği üzerinden geçirebilirsiniz stdinancak perl için çalışmaz (yorumunuzdan bahseder).

Not: Kodda kullanılan komutlar değiştirilen kaynak IP'yi bilmez ancak bu genellikle bir sorun olmamalıdır.

Tamamlanma adına, başka bir yol daha var. Bazı libc sembollerini değiştirmek için LD_PRELOAD ortam değişkenini kullanabilirsiniz, örneğin connect(), belirli bir kaynak adrese bağlanma gibi ek eylemler gerçekleştirecek kendi sürümünüz ile. Ama bu biraz gelişmiş bir C programlaması ve konvansiyonel waeponlarla daha iyi uyursunuz :).


Ve sadece belirli bir komut dosyası için buna dayanarak kaynak IP'yi nasıl değiştirebiliriz?
Asad Moeen

@AsadMoeen Cevaptaki yeni bilgilerin sizin için işe yarayıp yaramadığını bana bildirin. Herhangi bir sorun olursa, güncelleyeceğim.
Pavel Šimerda

Bu arada, ilk iki satır şu olduğunda komut dosyası yanıt vermiyor: "newgrp secondaryip #! / Usr / bin / perl"
Asad Moeen 16.03

Yeterince doğru, güncellenmiş cevaba bakınız.
Pavel Šimerda

Teşekkür ederim. Ancak "sg" komutu parametrelerin betiğe geçmesine izin vermez.
Asad Moeen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.