Mon programme est supposé garder une trace de chaque adresse IP et les mapper sur une adresse aléatoire, puis procéder à gsub toutes les adresses IP avec les aléatoires. Mon gsub fonctionne cependant sur des endroits qui n'ont pas tout à fait l'adresse IP (il s'ajoute au dos d'une URL avec un tas de chiffres où il ajoute l'adresse IP devant les chiffres) ou quand il remplace un adresse IP, il la remplace plusieurs fois.

V est une chaîne aléatoire comme "https://10.110.0.100/html/1202234"

Que quand cela fonctionne, se transforme en

https://227.95.94.95227.95.94.95227.95.94.95227.95.94.95227.95.94.95227.95.94.95227.95.94.95227.95.94.95227.95.94.95227.95.94.95227.95.94.95227.95.94.95227.95.94.95/html/227.95.94.952227.95.94.952234
ipsRand = Hash[]
ips = v.scan(/(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b)/)
ips.each { |x|
if ips.length > 0
    ips.each { |x|
        if !ipsRand.key?(x)
            ip = "%d.%d.%d.%d" % [rand(256), rand(256), rand(256), rand(256)]
            ipsRand["#{x}"] = ip
            v.gsub!(/#{x}/, ip) 
        else
            v.gsub!(/#{x}/, ipsRand["#{x}"])
        end 
    }
end

Je ne sais pas exactement quoi faire ici, lorsque j'échange /#{x} avec l'expression régulière utilisée pour analyser l'adresse IP, le gsub fonctionne très bien, mais je ne peux pas mapper chaque adresse IP à la bonne aléatoire.

2
reVolutionary 16 nov. 2020 à 20:01

1 réponse

Meilleure réponse

C'est beaucoup plus facile si vous utilisez un hachage avec une valeur par défaut :

ips_rand = Hash.new do |h, k|
  h[k] = '%d.%d.%d.%d' % [rand(256), rand(256), rand(256), rand(256)]
end

Ce hachage créera une nouvelle adresse IP aléatoire à chaque fois qu'il sera appelé (avec une adresse IP inconnue) et la réutilisera par la suite (lorsqu'il sera appelé avec une adresse IP connue).

De plus, il peut être directement transmis à gsub :

PATTERN = /\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/

a = 'https://10.110.0.100/foo/bar'
b = 'https://10.110.0.100/baz/qux'
c = 'https://20.220.0.200/quux'

a.gsub(PATTERN, ips_rand) #=> "https://213.19.202.167/foo/bar"
b.gsub(PATTERN, ips_rand) #=> "https://213.19.202.167/baz/qux"
c.gsub(PATTERN, ips_rand) #=> "https://26.21.120.130/quux"
ips_rand
#=> {"10.110.0.100"=>"213.19.202.167", "20.220.0.200"=>"26.21.120.130"}
5
Stefan 17 nov. 2020 à 05:21