PythonでIPアドレスを無害化(Defang)する方法
IPアドレスの無害化(Defang)とは
有効なIPv4アドレスが与えられたとき、その「無害化(Defang)バージョン」を返すことを考えます。無害化されたIPアドレスとは、すべてのピリオド「.」を「[.]」に置き換えたものです。例えば、IPアドレスが「192.168.4.1」であれば、出力は「192[.]168[.]4[.]1」となります。
この処理は、セキュリティの分野でよく使われます。記事やログの中に実際のIPアドレスがそのまま記載されると、自動化されたクローラーやマルウェアがそれを本物のアドレスとして認識してしまう恐れがあるためです。「[.]」という表記にすることで、人間には読みやすく、機械的には解釈されにくい形になります。
解決の手順
この問題は、Pythonの文字列操作メソッドを使えば非常にシンプルに解決できます。手順は以下のとおりです。
- まず、
split(".")を使って、入力文字列をピリオドで分割します。 - 次に、
"[.]".join()を使って、分割した各要素を「[.]」で連結して返します。
実装例
それでは、実際のコードを見てみましょう。
class Solution(object):
def defangIPaddr(self, address):
address = address.split(".")
return "[.]".join(address)
ob1 = Solution()
print(ob1.defangIPaddr("192.168.4.1"))入力
"192.168.4.1"
出力
"192[.]168[.]4[.]1"
別の書き方:replace()を使う方法
split と join を使う以外にも、str.replace() メソッドを使えば1行で同じ結果を得られます。
def defang_ip(address):
return address.replace(".", "[.]")
print(defang_ip("192.168.4.1")) # 192[.]168[.]4[.]1どちらの方法でも計算量は O(n)(nは文字列の長さ)であり、実用上の違いはほとんどありません。コードの可読性や好みに応じて選択するとよいでしょう。
-
【初心者向け】Pythonのissuperset()メソッドの使い方をわかりやすく解説
はじめにこの記事では、Pythonのissuperset()メソッドについて、基本的な仕組みから実際のコード例まで詳しく解説します。issuperset()は、セット(集合)に対して使用できるメソッドで、引数として渡されたセットのすべての要素が、呼び出し元のセットに含まれているかどうかを判定します。呼び出し元のセットBが、引数のセットAのすべての要素を含んでいる場合 → True を返すセットAの要素がすべてBに含まれていない場合 → False を返すつまり、「BがAの上位集合(スーパーセット)であるかどうか」を判定するためのメソッドです。基本構文B.issuperset(A)この式は、Bが
-
PythonでIPアドレスから先行ゼロ(先頭の0)を削除する方法
IPアドレスには、オクテットごとに余分な先行ゼロ(先頭の「0」)が含まれていることがあります。例えば「200.040.009.400」のような表記は、正規の形式では「200.40.9.400」と表されます。この問題を解決する基本的な考え方はシンプルです。まずIPアドレスの文字列を「.」(ドット)で分割し、各部分を整数型(int)に変換します。整数への変換時点で先頭のゼロは自動的に取り除かれるため、その後、再び文字列に戻して「.」で連結すれば、整形済みのIPアドレスが完成します。実行例入力 : 200.040.009.400 出力 : 200.40.9.400アルゴリズムStep 1: IPアド