tag:crieit.net,2005:https://crieit.net/boards/route508-of-100days-of-code/feed 「Route508の100DaysOfCode」の投稿 - Crieit Crieitで「Route508の100DaysOfCode」ボードに投稿された最近の投稿 2019-01-11T13:27:20+09:00 https://crieit.net/boards/route508-of-100days-of-code/feed tag:crieit.net,2005:PublicArticle/4a376c9372902b8249a766e4464dfd04 2019-01-11T13:27:20+09:00 2019-01-11T13:27:20+09:00 https://crieit.net/boards/route508-of-100days-of-code/4a376c9372902b8249a766e4464dfd04 【Python】URLからIPアドレスを取得するソケット通信を利用してURLからIPアドレスを... <h1>【Python】URLからIPアドレスを取得する</h1> <p>ソケット通信を利用してURLからIPアドレスを取得してみましょう。</p> <h2>正規表現とソケット通信でIPアドレス取得</h2> <p>使用するモジュールはPython3.6標準のreとsocket。</p> <p>コードは以下の通り。</p> <pre><code># -*- coding: utf-8 -*- import socket import re def url_to_domain(url): try: reg = r'https?://([\w\-.]+)' return re.search(reg, url).group(1) except: return False def domain_to_ipaddress(domain): try: return socket.gethostbyname(domain) except: return False if __name__ == "__main__": urls = ['https://www.google.com', 'http://www.ikedahayato.com/20190110/78056845.html', 'http://weblog.horiemon.com/100blog/48821/'] for url in urls: print('-------------') print(url) domain = url_to_domain(url) print(domain) ipaddress = domain_to_ipaddress(domain) print(ipaddress) </code></pre> <p>結果はこちら。</p> <pre><code>------------- [https://www.google.com](https://www.google.com) www.google.com 172.217.25.100 ------------- [http://www.ikedahayato.com/20190110/78056845.html](http://www.ikedahayato.com/20190110/78056845.html) www.ikedahayato.com 203.104.130.159 ------------- [http://weblog.horiemon.com/100blog/48821/](http://weblog.horiemon.com/100blog/48821/) weblog.horiemon.com 99.84.138.23 </code></pre> <p>まず正規表現でurlからドメイン部を抽出。<br /> 次にソケット通信でIPアドレスを取得。</p> <p>いろいろ試してみた結果、</p> <ul> <li>大手ニュース/検索サイトはアクセス分散のためか調べるたびにIPアドレスが変化する</li> <li>ブログはライブドアなど同じサービスであればIPアドレスは同じ</li> <li>ブログに独自ドメイン設定してもIPアドレスは同じ</li> </ul> <p>ドメインが異なっていても同じサーバー上にある可能性に注意。</p> 国道508号線